home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / interrup.arc / INTERRUP.LST
File List  |  1987-11-03  |  98KB  |  2,330 lines

  1. -----------------------------------------------------------
  2. This list is the result of the time and effort of a large number of people, 
  3. among them
  4.         Janet Jack        January 1985  (original list)
  5.         J. Weaver Jr.     January 1985
  6.         John Cooper       February 1985
  7.         Skip Gilbrech     February 1985
  8.         Bob Jack
  9.         Jim Kyle          April 1985
  10.         John Ruschmeyer   <ihnp4!vax135!petsd!moncol!john> August 1985
  11.         Bill Frolik       <ihnp4!hplabs!hp-pcd!bill>       August 1985
  12.         Ross M. Greenberg <greenber%timeinc.uucp@brl.arpa> August 1985
  13.  
  14.         Dan Lanciani  <ddl@harvard.*>   TANDY function calls
  15.         Ralf Brown    <ralf@cs.cmu.edu> INT 24h and DOS func 59h error codes
  16.         Dan Davison   <dd@lanl.gov>     DOS 3.3 function calls
  17.         Bill White    <wwhite@teknowledge-vaxc.arpa> DOS 3.3
  18.  
  19. If you know any information which is not in this list, please let me know,
  20. so I can add it.
  21.  
  22.                 Ralf Brown
  23.           Arpa: ralf@cs.cmu.edu
  24.           UUCP: {uunet,ucbvax,harvard}!cs.cmu.edu!ralf
  25.           BIT:  ralf%cs.cmu.edu@cmuccvma
  26. -----------------------------------------------------------
  27. INT 0 - DIVIDE ERROR
  28. Automatically called at end of DIV or IDIV operation
  29. that results in error. Normally set by DOS to display an error
  30. message and abort the program.
  31. -----------------------------------------------------------
  32. INT 1 - SINGLE-STEP
  33. Generated at end of each machine instruction if
  34. TF bit in FLAGS is set. This is what makes the T command
  35. of DEBUG work for single-stepping. Is not generated after
  36. MOV to segment register or POP of segment register.
  37. -----------------------------------------------------------
  38. INT 2 - NMI (Non Maskable Interrupt)
  39. Generated by NMI signal in hardware. Used in IBM for
  40. memory parity error trapping.
  41. -----------------------------------------------------------
  42. INT 3 - 1-BYTE INTERRUPT
  43. Generated by opcode 0CCh. Similar to 8080's RST
  44. instruction. Generally used to set breakpoints for DEBUG.
  45. -----------------------------------------------------------
  46. INT 4 - Overflow (internal interrupt)
  47. Generated by INTO instruction if OF flag is set. If
  48. flag is not set, INTO is effectively a NOP. Used to trap any
  49. arithmetic errors when program is ready to handle them rather
  50. than immediately when they occur.
  51. -----------------------------------------------------------
  52. INT 5 - Print-Screen Key
  53. Automatically called by keyboard scan when print-
  54. screen key is pressed. Normally executes routine to print
  55. the screen, but may call any routine that can safely be
  56. executed from inside the keyboard scanner.
  57. Status and result byte at address 0050:0000.
  58. -----------------------------------------------------------
  59. INT 5 - BOUND check failed (80286 internal interrupt)
  60. -----------------------------------------------------------
  61. INT 6 - Undefined Opcode (80286 internal interrupt)
  62. -----------------------------------------------------------
  63. INT 7 - No Math Unit Available (80286 protected-mode internal)
  64. -----------------------------------------------------------
  65. INT 8 thru 0F - Vectored Hardware Lines
  66. In IBM, these 8 interrupts are generated in
  67. response to IRQ 0 through IRQ 7 (if enabled via port 21).
  68.                                                 [Tandy 1000]
  69.         IRQ0    -       timer interrupt
  70.         IRQ1    -       keyboard interrupt
  71.         IRQ2    -       EGA vertical retrace    [fixed disk]
  72.         IRQ3    -       serial port 2 (com2:)
  73.         IRQ4    -       serial port 1 (com1:)
  74.         IRQ5    -       fixed disk              [60hz ram refresh]
  75.                         (LPT2 on PC/AT)
  76.         IRQ6    -       diskette interrupt
  77.         IRQ7    -       PPI interrupt (lpt1:, lpt2:)
  78. -----------------------------------------------------------
  79. INT 8 - Double Fault (80286 protected-mode internal)
  80. -----------------------------------------------------------
  81. INT 9 - Math Unit Protection Fault (80286 protected-mode internal)
  82. -----------------------------------------------------------
  83. INT 0A - Invalid Task State Segment (80286 protected-mode internal)
  84. -----------------------------------------------------------
  85. INT 0B - Not Present (80286 protected-mode internal)
  86. -----------------------------------------------------------
  87. INT 0C - Stack Fault (80286 protected-mode internal)
  88. -----------------------------------------------------------
  89. INT 0D - General Protection Violation (80286 protected-mode internal)
  90. -----------------------------------------------------------
  91. INT 0E - Page Fault (80386 native-mode internal)
  92. -----------------------------------------------------------
  93. INT 10 - VIDEO - SET VIDEO MODE
  94.         AH = 0
  95.         AL =
  96.                 0 = 40x25 B&W
  97.                 1 = 40x25 COLOR
  98.                 2 = 80x25 BW
  99.                 3 = 80x25 COLOR
  100.                 4 = 320x200 GRAPHICS, 4 COLOR
  101.                 5 = 320x200 GRAPHICS, 4 GREY
  102.                 6 = 640x200 GRAPHICS, B&W
  103.                 7 = MONOCHROME
  104.                 8 = 160x200 GRAPHICS, 16 COLOR (PCjr/Tandy 1000)
  105.                 9 = 320x200 GRAPHICS, 16 COLOR (PCjr/Tandy 1000)
  106.                 A = 640x200 GRAPHICS, 4 COLOR (PCjr/Tandy 1000)
  107.                 D = 320x200 graphics, 16 color (EGA)
  108.                 E = 640x200 graphics, 16 color (EGA)
  109.                 F = 640x350 graphics, monochrome (EGA)
  110.                10 = 640x350 graphics, 4 or 16 color (EGA)
  111. -----------------------------------------------------------
  112. INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
  113.         AH = 1
  114.         CH =
  115.                 bits 5-6 = blink attribute
  116.                         (00=normal, 01=invis., 10 = slow, 11=fast)
  117.                 bits 0-4 = start line for cursor in char. cell
  118.         CL =
  119.                 bits 0-4 = end line for cursor in char. cell
  120. -----------------------------------------------------------
  121. INT 10 - VIDEO - SET CURSOR POSITION
  122.         AH = 2
  123.         DH,DL = ROW,COLUMN - 0,0 = UPPER LEFT
  124.         BH = PAGE NO. - 0 = GRAPHICS
  125. -----------------------------------------------------------
  126. INT 10 - VIDEO - READ CURSOR POSITION
  127.         AH = 3
  128.         BH = PAGE NO. - 0 = GRAPHICS
  129.         Return: DH,DL = ROW,COLUMN
  130.                 CH,CL = CURSOR MODE,CURRENT SET
  131. -----------------------------------------------------------
  132. INT 10 - VIDEO - READ LIGHT PEN POSITION
  133.         AH = 4
  134.         Return: AH = 0: light pen switch not activated
  135.                 AH = 1: light pen values in registers
  136.                 DH = row of current position
  137.                 DL = column of current position
  138.                 CH = raster line (0-199)
  139.                 BX = pixel column (0-319 or 0-639)
  140. -----------------------------------------------------------
  141. INT 10 - VIDEO - SELECT DISPLAY PAGE
  142.         AH = 5
  143.         AL =
  144.                 0 - 7: new page value for modes 0 & 1
  145.                 0 - 3: new page value for modes 2 & 3
  146.                 80H: read CRT/CPU page registers [PCjr]
  147.                 81H: set CPU page register to value in BL [PCjr]
  148.                 82H: set CRT page register to value in BH [PCjr]
  149.                 83H: set both display registers [PCjr]
  150.         Return: BH = CRT page register
  151.                 BL = CPU page register
  152. -----------------------------------------------------------
  153. INT 10 - VIDEO - SCROLL PAGE UP
  154.         AH = 6
  155.         AL = NO. OF LINES BLANKED AT BOTTOM OF PAGE
  156.                 0 = BLANK WINDOW
  157.         BH = ATTRIBUTES TO BE USED ON BLANK LINE
  158.         WINDOW:
  159.         CH,CL = UPPER LEFT CORNER
  160.         DH,DL = LOWER RIGHT CORNER
  161. -----------------------------------------------------------
  162. INT 10 - VIDEO - SCROLL PAGE DOWN
  163.         AH = 7
  164.         AL = NO. OF LINES BLANKED AT TOP OF PAGE
  165.                 0 = BLANK WINDOW
  166.         BH = ATTRIBUTES TO BE USED ON BLANK LINE
  167.         WINDOW:
  168.         CH,CL = UPPER LEFT CORNER
  169.         DH,DL = LOWER RIGHT CORNER
  170. -----------------------------------------------------------
  171. INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
  172.         AH = 8
  173.         BH = DISPLAY PAGE
  174.         Return: AL = CHAR
  175.                 AH = ATTRIBUTE OF CHAR - ALPHA MODE
  176. -----------------------------------------------------------
  177. INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
  178.         AH = 9
  179.         AL = CHARACTER
  180.         BH = DISPLAY PAGE - ALPHA MODE
  181.         BL = attributes of char (alpha modes) or color (graphics modes)
  182.         CX = number of times to write character
  183. -----------------------------------------------------------
  184. INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
  185.         AH = 0AH
  186.         AL = CHARACTER
  187.         BH = DISPLAY PAGE - ALPHA MODE
  188.         BL = COLOR OF CHARACTER (GRAPHICS MODE)
  189.         CX = number of times to write character
  190. -----------------------------------------------------------
  191. INT 10 - SET COLOR PALETTE
  192.         AH = 0BH
  193.         BH = PALETTE COLOR ID
  194.         BL = COLOR TO BE USED W/COLOR ID
  195. -----------------------------------------------------------
  196. INT 10 - WRITE DOT ON SCREEN
  197.         AH = 0Ch
  198.         AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5)
  199.              if bit 7 set, new color will be XORed with current pixel
  200.         DX = row (0 - 199)
  201.         CX = column (0 - 319 in modes 4/5, 0 - 639 in mode 6)
  202.         Note: video modes 4-6 only
  203. -----------------------------------------------------------
  204. INT 10 - READ DOT ON SCREEN
  205.         AH = 0Dh
  206.         CX = column (0 - 319 or 639)
  207.         DX = row (0 - 199)
  208.         Return: AL = COLOR READ
  209. -----------------------------------------------------------
  210. INT 10 - WRITE CHARACTER - ADVANCE CURSOR (TTY WRITE)
  211.         AH = 0EH
  212.         AL = character
  213.         BH = display page (alpha modes)
  214.         BL = foreground color (graphics modes)
  215. -----------------------------------------------------------
  216. INT 10 - GET CURRENT VIDEO MODE
  217.         AH = 0FH
  218.         Return: AH = # OF COLUMNS ON SCREEN
  219.                 AL = CURRENT VIDEO MODE
  220.                 BH = CURRENT ACTIVE DISPLAY PAGE
  221. -----------------------------------------------------------
  222. INT 10 - SET PALETTE REGISTERS (PCjr AND TANDY 1000)
  223.         AH = 10H
  224.         AL = 0: SET PALETTE REGISTER
  225.                 BL = PALETTE REGISTER TO SET
  226.                 BH = COLOR VALUE TO STORE
  227.         AL = 1: SET BORDER COLOR REGISTER
  228.                 BH = COLOR VALUE TO STORE
  229.         AL = 2: SET ALL PALETTE REGISTERS
  230.                 ES:DX = POINTER TO 17-BYTE LIST
  231.                         BYTES 0-15 = VALUES FOR PALETTE REGS. 0-15
  232.                         BYTE 16 = VALUE FOR BORDER REGISTER
  233. -----------------------------------------------------------
  234. INT 10 - WRITE STRING, DON'T MOVE CURSOR (PC/AT ONLY)
  235.         AH = 13H
  236.         AL = 0
  237.         BL = ATTRIBUTE
  238.         BH = DISPLAY PAGE NUMBER
  239.         DX = STARTING CURSOR POSITION
  240.         CX = LENGTH OF STRING
  241.         ES:BP = POINTER TO START OF STRING
  242. -----------------------------------------------------------
  243. INT 10 - WRITE STRING, MOVE CURSOR AFTER STRING (PC/AT ONLY)
  244.         AH = 13H
  245.         AL = 1
  246.         BL = ATTRIBUTE
  247.         BH = DISPLAY PAGE NUMBER
  248.         DX = STARTING CURSOR POSITION
  249.         CX = LENGTH OF STRING
  250.         ES:BP = POINTER TO START OF STRING      
  251. -----------------------------------------------------------
  252. INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  253.         DON'T MOVE CURSOR (PC/AT ONLY)
  254.         AH = 13H
  255.         AL = 2
  256.         BH = DISPLAY PAGE NUMBER
  257.         DX = STARTING CURSOR POSITION
  258.         CX = LENGTH OF STRING
  259.         ES:BP = POINTER TO START OF STRING      
  260. -----------------------------------------------------------
  261. INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  262.         MOVE CURSOR (PC/AT ONLY)
  263.         AH = 13H
  264.         AL = 3
  265.         BH = DISPLAY PAGE NUMBER
  266.         DX = STARTING CURSOR POSITION
  267.         CX = LENGTH OF STRING
  268.         ES:BP = POINTER TO START OF STRING      
  269. -----------------------------------------------------------
  270. INT 10 - GET VIDEO RAM ADDRESS [TANDY 1000]
  271.         AH = 70H
  272.         Return: AX  = SEGMENT ADDRESS OF THE FOLLOWING
  273.                 [BX] = OFFSET ADDRESS OF GREEN PLANE
  274.                 [CX] = SEGMENT ADDRESS OF GREEN PLANE
  275.                 [DX] = SEGMENT ADDRESS OF RED/BLUE PLANE
  276.                 (RED OFFSET = 0, BLUE OFFSET = 4000)
  277. -----------------------------------------------------------
  278. INT 10 - GET INCRAM ADDRESSES [TANDY 1000]
  279.         AH = 71H
  280.         Return: AX  = SEGMENT ADDRESS OF THE FOLLOWING
  281.                 [BX] = SEGMENT ADDRESS OF INCRAM
  282.                 [CX] = OFFSET ADDRESS OF INCRAM
  283. -----------------------------------------------------------
  284. INT 10 - SCROLL SCREEN RIGHT [TANDY 1000]
  285.         AH = 72H
  286.         AL = NO. OF COLUMNS BLANKED AT LEFT OF PAGE
  287.                 0 = BLANK WINDOW
  288.         BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  289.         WINDOW:
  290.         CH,CL = UPPER LEFT CORNER
  291.         DH,DL = LOWER RIGHT CORNER
  292. ----------------------------------------------------------
  293. INT 10 - SCROLL SCREEN LEFT [TANDY 1000]
  294.         AH = 73H
  295.         AL = NO. OF COLUMNS BLANKED AT RIGHT OF PAGE
  296.                 0 = BLANK WINDOW
  297.         BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  298.         WINDOW:
  299.         CH,CL = UPPER LEFT CORNER
  300.         DH,DL = LOWER RIGHT CORNER
  301. -----------------------------------------------------------
  302. INT 10 - Get Video Buffer (TopView/DESQview/TaskView)
  303.         AH = FEh
  304.         ES:DI = segment:offset of assumed video buffer
  305.         Returns:
  306.                 ES:DI = segment:offset of actual video buffer
  307. -----------------------------------------------------------
  308. INT 10 - Update Video Buffer (TopView/DESQview/TaskView)
  309.         AH = FFh
  310.         CX = number of sequential characters that have been modified
  311.         DI = offset of first character that has been modified
  312.         ES = segment of video buffer
  313. -----------------------------------------------------------
  314. INT 11 - EQUIPMENT DETERMINATION
  315.         Return: AX = "equipment flag" bits
  316.                 0       diskette installed
  317.                 1       8087 present
  318.                 2,3     always = 11
  319.                 4,5     initial video mode
  320.                         01 = 40x25 COLOR
  321.                         10 = 80x25 COLOR
  322.                         11 = 80X25 IBM monochrome
  323.                 6,7     number of diskette drives (only if bit 0 = 1)
  324.                         00 = 1, 01 = 2
  325.                 8       0 = dma present, 1= no dma on system
  326.                 9,10,11 number of RS232 cards
  327.                 12      game I/O attached
  328.                 13      serial printer installed (IBM-PCjr)
  329.                 14,15   number of printers
  330. -----------------------------------------------------------
  331. INT 12 - MEMORY SIZE
  332.         Return: AX = NO. OF CONTIGUOUS 1K BLOCKS
  333. -----------------------------------------------------------
  334. INT 13 - RESET DISK SYSTEM
  335.         AH = 0
  336. -----------------------------------------------------------
  337. INT 13 - STATUS OF DISK SYSTEM
  338.         AH = 1
  339.         Return: AL = STATUS
  340.                 01H = BAD COMMAND
  341.                 02H = ADDRESS MARK NOT FOUND
  342.                 03H = WRITE ATTEMPTED ON WRITE-PROTECTED DISK
  343.                 04H = SECTOR NOT FOUND
  344.                 06H = DISKETTE REMOVED
  345.                 08H = DMA OVERRUN
  346.                 09H = DMA ACROSS 64K BOUNDARY
  347.                 10H = BAD CRC
  348.                 20H = CONTROLLER FAILURE
  349.                 40H = SEEK FAILED
  350.                 80H = TIME OUT
  351. -----------------------------------------------------------
  352. INT 13 - READ SECTORS INTO MEMORY
  353.         AH = 2
  354.         AL = NO. OF SECTORS
  355.         CH = TRACK NO.
  356.         CL = SECTOR NO.
  357.         DH = HEAD NO.
  358.         DL = DRIVE NO.
  359.         ES:BX = ADDRESS OF BUFFER
  360.         Return: CF = SUCCESS/FAILURE SIGNAL
  361.                 AH = STATUS (SEE AH = 01)
  362.                 AL = NUMBER OF SECTORS READ             
  363. -----------------------------------------------------------
  364. INT 13 - WRITES SECTORS FROM MEMORY
  365.         AH = 3
  366.         AL = NO. OF SECTORS
  367.         CH = TRACK NO.
  368.         CL = SECTOR NO.
  369.         DH = HEAD NO.
  370.         DL = DRIVE NO.
  371.         ES:BX = ADDRESS OF BUFFER
  372.         Return: CF = SUCCESS/FAILURE SIGNAL
  373.                 AH = STATUS (SEE AH = 01)
  374.                 AL = NUMBER OF SECTORS WRITTEN
  375. -----------------------------------------------------------
  376. INT 13 - VERIFIES SECTORS
  377.         AH = 4
  378.         AL = NO. OF SECTORS
  379.         CH = TRACK NO.
  380.         CL = SECTOR NO.
  381.         DH = HEAD NO.
  382.         DL = DRIVE NO.
  383.         Return: CF = SUCCESS/FAILURE SIGNAL
  384.                 AH = STATUS (SEE AH = 01)
  385.                 AL = NUMBER OF SECTORS VERIFIED
  386. -----------------------------------------------------------
  387. INT 13 - FORMAT DISKETTE TRACK
  388.         AH = 5
  389.         AL = NUMBER OF SECTORS
  390.         CH = TRACK NUMBER
  391.         CL = SECTOR NUMBER
  392.         DH = HEAD NUMBER
  393.         DL = DRIVE NUMBER
  394.         ES:BX = POINTER TO 4-BYTE ADDRESS FIELD
  395.                 BYTE 1 = TRACK
  396.                 BYTE 2 = HEAD
  397.                 BYTE 3 = SECTOR
  398.                 BYTE 4 = BYTES/SECTOR
  399.         Return: CF = SUCCESS/FAILURE SIGNAL
  400.                 AH = STATUS CODE (SEE AH = 01)
  401. -----------------------------------------------------------
  402. INT 13 - GET CURRENT DRIVE PARAMETERS (PC/XT and PC/AT)
  403.         AH = 8
  404.         DL = DRIVE NUMBER
  405.         Return: CF = SUCCESS/FAILURE FLAG
  406.                 AH = STATUS CODE (SEE AH = 01)
  407.                 DL = NUMBER OF DRIVES (?)
  408.                 DH = MAX. NUMBER OF SIDES
  409.                 CL = MAX. NUMBER OF SECTORS
  410.                 CH = MAX. NUMBER OF TRACKS
  411. -----------------------------------------------------------
  412. INT 13 - INITIALIZE TWO FIXED DISK BASE TABLES (PC/AT ONLY)
  413.         AH = 9
  414.         Return: CF = SUCCESS/FAILURE FLAG
  415.                 AH = STATUS CODE (SEE ABOVE)
  416.                 INTERRUPT 41 POINTS TO TABLE FOR DRIVE 0
  417.                 INTERRUPT 46 POINTS TO TABLE FOR DRIVE 1
  418. -----------------------------------------------------------
  419. INT 13 - READ LONG (PC/AT ONLY)
  420.         AH = 0AH
  421.         DL = DRIVE ID
  422.         DH = HEAD NUMBER
  423.         CH = CYLINDER NUMBER
  424.         CL = SECTOR NUMBER
  425.         ES:BX = POINTER TO BUFFER
  426.         Return: CF = SUCCESS/FAILURE FLAG
  427.                 AH = STATUS CODE (SEE AH = 01)
  428. -----------------------------------------------------------
  429. INT 13 - WRITE LONG (PC/AT ONLY)
  430.         AH = 0BH
  431.         DL = DRIVE ID
  432.         DH = HEAD NUMBER
  433.         CH = SECTOR NUMBER
  434.         ES:BX = POINTER TO BUFFER
  435.         Return: CF = SUCCESS/FAILURE FLAG
  436.                 AH = STATUS CODE (SEE AH = 01)
  437. -----------------------------------------------------------
  438. INT 13 - SEEK TO CYLINDER (PC/XT and PC/AT)
  439.         AH = 0CH
  440.         DL = DRIVE ID
  441.         DH = HEAD NUMBER
  442.         CH = SECTOR NUMBER
  443.         Return: CF = SUCCESS/FAILURE FLAG
  444.                 AH = STATUS CODE (SEE AH = 01)
  445. -----------------------------------------------------------
  446. INT 13 - ATLERNATE DISK RESET (PC/XT and PC/AT)
  447.         AH = 0DH
  448.         DL = DRIVE ID
  449.         Return: CF = SUCCESS/FAIL FLAG
  450.                 AH = STATUS CODE (SEE AH = 01)
  451. -----------------------------------------------------------
  452. INT 13 - TEST FOR DRIVE READY (PC/AT ONLY)
  453.         AH = 10H
  454.         DL = DRIVE ID
  455.         Return: CF = SUCCESS/FAIL FLAG
  456.                 AH = STATUS CODE (SEE AH = 01)
  457. -----------------------------------------------------------
  458. INT 13 - RECALIBRATE DRIVE (PC/XT and PC/AT)
  459.         AH = 11H
  460.         DL = DRIVE ID
  461.         Return: CF = SUCCESS/FAIL FLAG
  462.                 AH = STATUS CODE (SEE AH = 01)
  463. -----------------------------------------------------------
  464. INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY)
  465.         AH = 14H
  466.         Return: CF = SUCCESS/FAIL FLAG
  467.                 AH = STATUS CODE (SEE AH = 01)
  468. -----------------------------------------------------------
  469. INT 13 - GET DISK TYPE (PC/AT ONLY)
  470.         AH = 15H
  471.         DL = DRIVE ID
  472.         Return: AH = DISK TYPE
  473.                 0 = DISK NOT THERE
  474.                 1 = DISKETTE, NO CHANGE DETECTION PRESENT
  475.                 2 = DISKETTE, CHANGE DETECTION PRESENT
  476.                 3 = FIXED DISK
  477.                 CX,DX = NUMBER OF 512-BYTE SECTORS WHEN AH = 3
  478. -----------------------------------------------------------
  479. INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY)
  480.         AH = 16H
  481.         Return: DL = DRIVE THAT HAD DISK CHANGE
  482.                 AH = DISK CHANGE STATUS
  483.                 00 = NO DISK CHANGE
  484.                 01 = DISK CHANGED (6?)
  485. -----------------------------------------------------------
  486. INT 13 - SET DISK TYPE (PC/AT ONLY)
  487.         AH = 17H
  488.         AL = DISK TYPE
  489.         00 = NO DISK
  490.         01 = REGULAR DISK IN REGULAR DRIVE
  491.         02 = REGULAR DISK IN HIGH-CAP. DRIVE
  492.         03 = HIGH-CAP. DISK IN HIGH-CAP. DRIVE
  493.         DL = DRIVE ID
  494. -----------------------------------------------------------
  495. INT 14 - SERIAL I/O - INITIALIZE USART
  496.         AH = 0
  497.         AL = INITIALIZING PARAMETERS
  498.         7 - 6 - 5      4 - 3     2    1 - 0
  499.         -BAUD RATE-    PARITY   STOP   WORD
  500.                                 BITS  LENGTH
  501.         000  110 BD    00 NONE  0-1   10 - 7
  502.         001  150 BD    01 ODD   1-2   11 - 8
  503.         010  300 BD    11 EVEN
  504.         011  600 BD
  505.         100 1200 BD
  506.         101 2400 BD
  507.         110 4800 BD
  508.         111 9600 BD (4800 ON PCjr)
  509.         DX = PORT NUMBER
  510.         Return: AX port status--see below
  511. -----------------------------------------------------------
  512. INT 14 - SERIAL I/O - TRANSMIT CHARACTER
  513.         AH = 1
  514.         AL = CHARACTER
  515.         DX = PORT NUMBER
  516.         Return: AH = RS-232 STATUS CODE BITS
  517.                 0 = DATA READY
  518.                 1 = OVERRUN ERROR
  519.                 2 = PARITY ERROR
  520.                 3 = FRAMING ERROR
  521.                 4 = BREAK DETECTED
  522.                 5 = TRANSMISSION BUFFER REG. EMPTY
  523.                 6 = TRANSMISSION SHIFT REG. EMPTY
  524.                 7 = TIME OUT
  525.                 AL = MODEM STATUS BITS
  526.                 0 = DELTA CLEAR-TO-SEND
  527.                 1 = DELTA DATA-SET-READY
  528.                 2 = TRAILING EDGE RING DETECTED
  529.                 3 = CHANGE, RECEIVE LINE SIGNAL DETECTED
  530.                 4 = CLEAR-TO-SEND
  531.                 5 = DATA-SET-READY
  532.                 6 = RING DETECTED
  533.                 7 = RECEIVE LINE SIGNAL DETECTED
  534. -----------------------------------------------------------
  535. INT 14 - SERIAL I/O - RECEIVE CHARACTER
  536.         AH = 2
  537.         Return: AL = CHARACTER RECEIVED
  538.                 AH = RS-232 STATUS CODE (SEE ABOVE)
  539. -----------------------------------------------------------
  540. INT 14 - SERIAL I/O - GET USART STATUS
  541.         AH = 3
  542.         Return: AH = RS-232 STATUS CODE (SEE ABOVE)
  543.                 AL = MODEM STATUS CODE (SEE ABOVE)
  544. -----------------------------------------------------------
  545. INT 15 - TURN ON CASSETTE MOTOR
  546.         AH = 0
  547. -----------------------------------------------------------
  548. INT 15 - TURN OFF CASSETTE MOTOR
  549.         AH = 1
  550. -----------------------------------------------------------
  551. INT 15 - READ DATA BLOCKS FROM CASSETTE
  552.         AH = 2
  553.         CX = COUNT OF BYTES
  554.         ES:BX = POINTER TO DATA AREA
  555.         Return: CF = ERROR SIGNAL
  556.                 DX = COUNT OF BYTES READ
  557.                 ES:BX = POINTER PAST LAST BYTE READ
  558. -----------------------------------------------------------
  559. INT 15 - WRITE DATA BLOCKS TO CASSETTE
  560.         AH = 3
  561.         CX = COUNT OF BYTES TO WRITE
  562.         ES:BX = POINTER TO DATA AREA
  563.         Return: ES:BX = POINTER PAST LAST BYTE WRITTEN
  564. -----------------------------------------------------------
  565. INT 15 - DESQview/TopView/TaskView - Give up CPU time
  566.         AX = 1000h
  567.         Return: after other process(es) run
  568. -----------------------------------------------------------
  569. INT 15 - DESQview/TopView/TaskView - Get Version
  570.         AX = 1022h
  571.         BX = 0
  572.         Return: BX nonzero, TopView or compat loaded
  573.                 TaskView returns BX = 0001h
  574. -----------------------------------------------------------
  575. INT 15 - DESQview/TopView/TaskView command
  576.         AH = 11h
  577.         AL = various
  578. -----------------------------------------------------------
  579. INT 15 - DESQview/TopView/TaskView command
  580.         AH = 12h
  581.         AL = various
  582. -----------------------------------------------------------
  583. INT 15 - DEVICE OPEN (PC/AT ONLY)
  584.         AH = 80h
  585.         Return: BX = DEVICE ID
  586.                 CX = PROCESS TYPE
  587. -----------------------------------------------------------
  588. INT 15 - DEVICE CLOSE (PC/AT ONLY)
  589.         AH = 81h
  590.         Return: BX = DEVICE ID
  591.                 CX = PROCESS TYPE
  592. -----------------------------------------------------------
  593. INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY)
  594.         AH = 82h
  595.         Return: BX = DEVICE ID
  596. -----------------------------------------------------------
  597. INT 15 - EVENT WAIT (PC/AT ONLY)
  598.         AH = 83h
  599.         AL = SUBSERVICE
  600.         0 = SET INTERVAL
  601.         1 = CANCEL
  602.         ES:BX = POINTER TO CALLER'S MEMORY
  603.         CX,DX = number of microseconds to wait (only accurate to 977 us)
  604. -----------------------------------------------------------
  605. INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY)
  606.         AH = 84h
  607.         DX = 0
  608.         Return: AL = SWITCH SETTINGS
  609. -----------------------------------------------------------
  610. INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY)
  611.         AH = 84h
  612.         DX = 1
  613.         Return: AX = A(x) VALUE
  614.                 BX = A(y) VALUE
  615.                 CX = B(x) VALUE
  616.                 DX = B(y) VALUE
  617. -----------------------------------------------------------
  618. INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY)
  619.         AH = 85h
  620.         Return: AL = 00 PRESS
  621.                 AL = 01 BREAK
  622. -----------------------------------------------------------
  623. INT 15 - WAIT (PC/AT ONLY)
  624.         AH = 86h
  625.         Return: CX,DX = number of microseconds to wait (only accurate to 977 us)
  626. -----------------------------------------------------------
  627. INT 15 - EXTENDED MEMORY - BLOCK MOVE   (PC/AT ONLY)
  628.         AH = 87h
  629.         CX = NUMBER OF WORDS TO MOVE
  630.         ES:SI = POINTER TO TABLE
  631. -----------------------------------------------------------
  632. INT 15 - EXTENDED MEMORY - GET MEMORY SIZE      (PC/AT ONLY)
  633.         AH = 88h
  634.         Return: AX = MEMORY SIZE
  635. -----------------------------------------------------------
  636. INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY)
  637.         AH = 89h
  638. -----------------------------------------------------------
  639. INT 15 - DEVICE BUSY LOOP (PC/AT ONLY)
  640.         AH = 90h
  641.         AL = TYPE CODE
  642. -----------------------------------------------------------
  643. INT 15 - SET FLAG AND COMPLETE INTERRUPT
  644.         AH = 91h
  645.         AL = TYPE CODE
  646. -----------------------------------------------------------
  647. INT 15 - GET SYSTEM CONFIGURATION (XT after 1/10/86, PC Conv, XT286, PS/2)
  648.         AH = C0h
  649.         Return: CF = 1 if BIOS doesn't support call
  650.                 ES:BX pointer to ROM table
  651.                    byte_count  dw   ?   ; number of bytes following
  652.                    model       db   ?   ; PC=ff, XT=fe or fb, PCjr = fd, etc, etc
  653.                    submodel    db   ?   ; distingushes between AT and XT/286, etc.
  654.                    BIOS_rev    db   ?   ; 0 for first release, 1 for 2nd, etc.
  655.                    featbyte    db   ?   ; 80h = DMA channel 3 used by hd BIOS,
  656.                                         ; 40h = 2nd 8259 installed,
  657.                                         ; 20h = Real-Time Clock installed,
  658.                                         ; 10h = INT 15h called upon INT 9h
  659.                                         ;  8h = wait for external event supported,
  660.                                         ;  4h = extended BIOS area allocated at 640K,
  661.                                         ;  2h = bus is Micro Channel instead of PC.
  662.                                         ;  1h   reserved
  663. -----------------------------------------------------------
  664. INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY
  665.         AH = 0
  666.         Return: AH = SCAN CODE
  667.                 AL = CHARACTER
  668. -----------------------------------------------------------
  669. INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR
  670.         AH = 1
  671.         Return: FLAG ZF = 0 = CHAR IN BUFFER
  672.                   AH = SCAN CODE
  673.                   AL = CHARACTER
  674.                 FLAG ZF = 1 = NO CHAR IN BUFFER
  675. -----------------------------------------------------------
  676. INT 16 - KEYBOARD I/O - GET SHIFT STATUS
  677.         AH = 2
  678.                 AL = SHIFT STATUS BITS
  679.                   0 = RIGHT SHIFT KEY DEPRESSED
  680.                   1 = LEFT SHIFT KEY DEPRESSED
  681.                   2 = CTRL DEPRESSED
  682.                   3 = ALT DEPRESSED
  683.                   4 = SCROLL LOCK ACTIVE
  684.                   5 = NUM LOCK ACTIVE
  685.                   6 = CAPS LOCK ACTIVE
  686.                   7 = INSERT STATE ACTIVE
  687. -----------------------------------------------------------
  688. INT 16 - KEYBOARD I/O - SET DELAYS (PCjr, AT, PS/2)
  689.         AH = 3
  690.         AL = 0: RESET TYPEMATIC (PCjr)
  691.         AL = 1: INCREASE INITIAL DELAY (PCjr)
  692.         AL = 2: INCREASE CONTINUING DELAY (PCjr)
  693.         AL = 3: INCREASE BOTH DELAYS (PCjr)
  694.         AL = 4: TURN OFF TYPEMATIC (PCjr)
  695.         AL = 5: Set typematic rate (AT or PS/2)
  696.           BH = 00 - 03 for delays of 250ms, 500ms, 750ms, or 1s
  697.           BL = 00 - 1F for typematic rates of 30cps down to 2cps
  698. -----------------------------------------------------------
  699. INT 16 - KEYBOARD I/O - KEYCLICK (PCjr ONLY)
  700.         AH = 4
  701.         AL = 0: CLICK OFF
  702.         AL = 1: CLICK ON
  703. -----------------------------------------------------------
  704. INT 16 - KEYBOARD - Write to keyboard buffer (AT or PS/2 with enhanced kbd)
  705.         AH = 5
  706.         CH = scan code
  707.         CL = character
  708. -----------------------------------------------------------
  709. INT 16 - KEYBOARD - Get enhanced keystroke (AT or PS/2 with enhanced kbd)
  710.         AH = 10h
  711.         Return: AH = scan code
  712.                 AL = character
  713. -----------------------------------------------------------
  714. INT 16 - KEYBOARD - Check enhanced keystroke (AT or PS/2 with enhanced kbd)
  715.         AH = 11h
  716.         Return: ZF = 0 if keystroke available
  717.                   AH = scan code \ meaningless if ZF = 1
  718.                   AL = character /
  719.                 ZF = 1 if kbd buffer empty
  720. -----------------------------------------------------------
  721. INT 16 - KEYBOARD - Get enhanced shift flags (AT or PS/2 with enhanced kbd)
  722.         AH = 12h
  723.         Return:
  724.                 AL (same as for AH=02)
  725.                   bit 7: Ins ON
  726.                   bit 6: CapsLock ON
  727.                   bit 5: NumLock ON
  728.                   bit 4: ScrollLock ON
  729.                   bit 3: Either ALT key down
  730.                   bit 2: Either CTRL key down
  731.                   bit 1: Left shift key down
  732.                   bit 0: Right shift key down
  733.                 AH
  734.                   bit 7: SysReq key down
  735.                   bit 6: CapsLock key down
  736.                   bit 5: NumLock key down
  737.                   bit 4: ScrollLock key down
  738.                   bit 3: Right Alt key down
  739.                   bit 2: Right Ctrl key down
  740.                   bit 1: Left Alt key down
  741.                   bit 0: Right Alt key down
  742. -----------------------------------------------------------
  743. INT 17 - CHARACTER TO PRINTER
  744.         AH = 0
  745.         AL = CHAR
  746.         Return: AH = STATUS BITS
  747.                   0 = TIME OUT
  748.                   1 = UNUSED
  749.                   2 = UNUSED
  750.                   3 = I/O ERROR
  751.                   4 = SELECTED
  752.                   5 = OUT OF PAPER
  753.                   6 = ACKNOWLEDGE
  754.                   7 = NOT BUSY
  755. -----------------------------------------------------------
  756. INT 17 - INITIALIZE PRINTER
  757.         AH = 1
  758.         Return: AH = STATUS (SEE ABOVE)
  759. -----------------------------------------------------------
  760. INT 17 - STATUS OF PRINTER
  761.         AH = 2
  762.         Return: AH = STATUS (SEE ABOVE)
  763. -----------------------------------------------------------
  764. INT 18 - TRANSFER TO ROM BASIC
  765. CAUSES TRANSFER TO ROM-BASED BASIC (IBM-PC)
  766. OFTEN REBOOTS A COMPATIBLE
  767. -----------------------------------------------------------
  768. INT 19 - DISK BOOT
  769. CAUSES REBOOT OF DISK SYSTEM (NO MEMORY TEST PERFORMED).
  770. -----------------------------------------------------------
  771. INT 1A - GET TIME OF DAY
  772.         AH = 0
  773.         Return: CX = high (most signif.) portion of clock count
  774.                 DX = low (least signif.) portion of clock count
  775.                 AL = 0 if clock was read or written (via AH=0,1)
  776.                 withing the current 24-hour period
  777.                 Otherwise, AL > 0
  778. -----------------------------------------------------------
  779. INT 1A - SET TIME OF DAY
  780.         AH = 1
  781.         CX = high (most signif.) portion of clock count
  782.         DX = low (least signif.) portion of clock count
  783. -----------------------------------------------------------
  784. INT 1A - READ REAL TIME CLOCK (PC/AT ONLY)
  785.         AH = 2
  786.         Return: CH = hours
  787.                 CL = minutes
  788.                 DH = seconds
  789. -----------------------------------------------------------
  790. INT 1A - SET REAL TIME CLOCK (PC/AT ONLY)
  791.         AH = 3
  792.         Return: CH = hours
  793.                 CL = minutes
  794.                 DH = seconds
  795.                 DL = 1, if daylight savings; 0 if standard time
  796. -----------------------------------------------------------
  797. INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY)
  798.         AH = 4
  799.         Return: DL = DAY
  800.                 DH = MONTH
  801.                 CL = YEAR
  802.                 CH = CENTURY (19 OR 20)
  803. -----------------------------------------------------------
  804. INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY)
  805.         AH = 5
  806.         DL = DAY
  807.         DH = MONTH
  808.         CL = YEAR
  809.         CH = CENTURY (19 OR 20)
  810. -----------------------------------------------------------
  811. INT 1A - SET ALARM (PC/AT ONLY)
  812.         AH = 6
  813.         CH = HOURS
  814.         CL = MINUTES
  815.         DH = SECONDS
  816.         Return: INT 4Ah will be called when alarm goes off
  817. -----------------------------------------------------------
  818. INT 1A - RESET ALARM (PC/AT ONLY)
  819.         AH = 7
  820. -----------------------------------------------------------
  821. INT 1B - CTRL-BREAK KEY
  822. This interrupt is called when the keyboard scanner of
  823. the IBM machines detects CTRL and BREAK pressed at the same
  824. time. It normally points to a simple IRET so that it does
  825. nothing, but many programs change it to return a CTRL-C scan
  826. code and thus invoke INT 23.
  827. -----------------------------------------------------------
  828. INT 1C - CLOCK TICK
  829. This interrupt is called (in the IBM) at the end of
  830. each time-update operation by the real-time clock routines. It
  831. normally points to an IRET unless PRINT.COM has been installed.
  832. -----------------------------------------------------------
  833. INT 1D -> 6845 Video Init tables
  834.         table for modes 0 and 1   \
  835.         table for modes 2 and 3    \ each table is 16 bytes long
  836.         table for modes 4,5, and 6 /
  837.         table for mode 7          /
  838.         4 words -- size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
  839.         8 bytes -- number of columns in each mode
  840.         8 bytes -- video controller mode byte for each mode
  841. -----------------------------------------------------------
  842. INT 1E -> Diskette Params (BASE TABLE)
  843. Default at f000:efc7
  844.         db      step rate & head unload times
  845.         db      head load time & DMA
  846.         db      motor off time
  847.         db      sector size (0->128, 1->256, 2->512, 3->1024)
  848.         db      last sector number (8 or 9 typical)
  849.         db      inter-sector gap size on read/write (42 typical)
  850.         db      data transfer length (255 typical)
  851.         db      inter-sector gap size on format (80 typical)
  852.         db      sector fill on format (f6 typical)
  853.         db      head-settle time ms (typical 25, 2.10->15)
  854.         db      motor start-up time (1/8 secs) (typical 4, 2.10->2)
  855. -----------------------------------------------------------
  856. INT 1F -> Pointer to Graphics Set 2--contains bitmaps for high 128 chars
  857. -----------------------------------------------------------
  858. INT 20 - PROGRAM TERMINATION
  859. RETURNS TO DOS
  860. -----------------------------------------------------------
  861. INT 21 - PROGRAM TERMINATION
  862.         AH = 00H
  863. Same action as INT 20; returns to DOS.
  864. -----------------------------------------------------------
  865. INT 21 - KEYBOARD INPUT
  866.         AH = 01H
  867.         Return: AL = CHARACTER READ
  868. -----------------------------------------------------------
  869. INT 21 - DISPLAY OUTPUT
  870.         AH = 02H
  871.         DL = CHAR
  872. -----------------------------------------------------------
  873. INT 21 - AUX Input
  874.         AH = 03H
  875.         Return: AL = CHARACTER READ
  876. -----------------------------------------------------------
  877. INT 21 - AUX Output
  878.         AH = 04H
  879.         DL = CHAR
  880. -----------------------------------------------------------
  881. INT 21 - PRINTER OUTPUT
  882.         AH = 05H
  883.         DL = CHAR
  884. -----------------------------------------------------------
  885. INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT
  886.         AH = 06H
  887.         DL = CHAR <> 0FFH
  888. -----------------------------------------------------------
  889. INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT
  890.         AH = 06H
  891.         DL = 0FFH
  892.         Return: FLAG ZF = SET    = NO CHARACTER
  893.                 CLEAR  = CHARACTER RECIEVED
  894.                 AL = CHARACTER
  895.                 Character is echoed to STDOUT if received.
  896. -----------------------------------------------------------
  897. INT 21 - Direct STDIN Input, no echo
  898.         Reg AH = 07H
  899. Same as Function 6 for input but char not echoed.
  900. -----------------------------------------------------------
  901. INT 21 - KEYBOARD INPUT - NO ECHO
  902.         AH = 08H
  903.         Return: AL = CHAR
  904. -----------------------------------------------------------
  905. INT 21 - PRINT STRING
  906.         AH = 09H
  907.         DS:DX  = ADDRESS OF STRING TERMINATED WITH "$"
  908. -----------------------------------------------------------
  909. INT 21 - BUFFERED KEYBOARD INPUT
  910.         AH = 0AH
  911.         DS:DX  = ADDRESS OF BUFFER
  912. FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH
  913. ON RETURN SECOND BYTE HAS ACTUAL LENGTH
  914. -----------------------------------------------------------
  915. INT 21 - CHECK STANDARD INPUT STATUS
  916.         AH = 0BH
  917.         Return: AL =
  918.                 FFH IF CHAR TYPED
  919.                 00H IF NOT TYPED
  920. -----------------------------------------------------------
  921. INT 21 - Clear Keyboard Buffer
  922.         AH = 0CH
  923.         AL must be 1, 6, 7, 8, or 0aH.
  924.   Flushes all typeahead input, then executes function specified
  925. by AL (by moving it to AH and repeating the INT 21 call).
  926.   If AL contains a value not in the list above, the keyboard buffer is
  927. flushed and no other action is taken.
  928. -----------------------------------------------------------
  929. INT 21 - Disk Reset
  930.         Reg AH = 0DH
  931. Flushes all disk buffers.
  932. -----------------------------------------------------------
  933. INT 21 - SELECT DISK
  934.         AH = 0EH
  935.         DL = new default drive number (0 = A, 1 = B, etc.)
  936.         Return: AL = number of logical drives
  937. -----------------------------------------------------------
  938. INT 21 - OPEN DISK FILE
  939.         AH = 0FH
  940.         DS = SEGMENT ADDRESS OF FCB
  941.         DX = OFFSET ADDRESS OF FCB
  942.         Return: AL =
  943.                 00 = FILE FOUND
  944.                 FF = FILE NOT FOUND
  945. -----------------------------------------------------------
  946. INT 21 - CLOSE DISK FILE
  947.         AH = 10H
  948.         DS = SEGMENT ADDRESS OF FCB
  949.         DX = OFFSET ADDRESS OF FCB
  950. -----------------------------------------------------------
  951. INT 21 - Search First using FCB
  952.         AH = 11H
  953.         DS = SEGMENT ADDRESS OF FCB
  954.         DX = OFFSET ADDRESS OF FCB
  955.         Return: AL =
  956.                 00 = FILE FOUND
  957.                 FF = FILE NOT FOUND
  958. If file found, FCB is created at DTA address and
  959. set up to OPEN or DELETE it.
  960. -----------------------------------------------------------
  961. INT 21 - Search Next using FCB
  962.         AH = 12H
  963.         DS = SEGMENT ADDRESS OF FCB
  964.         DX = OFFSET ADDRESS OF FCB
  965.         Return: AL =
  966.                 00 = FILE FOUND
  967.                 FF = FILE NOT FOUND
  968. If file found, FCB is created at DTA address and
  969. set up to OPEN or DELETE it.
  970. -----------------------------------------------------------
  971. INT 21 - Delete File via FCB
  972.         AH = 13H
  973.         DS = SEGMENT ADDRESS OF FCB
  974.         DX = OFFSET ADDRESS OF FCB
  975.         Return: AL =
  976.                 00 = FILE FOUND
  977.                 FF = FILE NOT FOUND
  978. -----------------------------------------------------------
  979. INT 21 - SEQUENTIAL DISK FILE READ
  980.         AH = 14H
  981.         DS = SEGMENT ADDRESS OF FCB
  982.         DX = OFFSET ADDRESS OF FCB
  983.         Return: AL =
  984.                 0 = SUCCESSFUL READ
  985.                 1 = END OF FILE
  986.                 2 = DATA TRANSFER AREA TOO SMALL
  987.                 3 = PARTIAL RECORD, EOF
  988. -----------------------------------------------------------
  989. INT 21 - SEQUENTIAL DISK RECORD WRITE
  990.         AH = 15H
  991.         DS = SEGMENT ADDRESS OF FCB
  992.         DX = OFFSET ADDRESS OF FCB
  993.         Return: AL =
  994.                 0 = SUCCESSFUL WRITE
  995.                 1 = DISKETTE FULL
  996.                 2 = DATA TRANSFER AREA TOO SMALL
  997. -----------------------------------------------------------
  998. INT 21 - CREATE A DISK FILE
  999.         AH = 16H
  1000.         DS = SEGMENT ADDRESS OF FCB
  1001.         DX = OFFSET ADDRESS OF FCB
  1002.         Return: AL =
  1003.                 00 = SUCCESSFUL CREATION
  1004.                 FF = NO ROOM IN DIRECTORY
  1005. -----------------------------------------------------------
  1006. INT 21 - Rename File via FCB
  1007.         AH = 17H
  1008.         DS = SEGMENT ADDRESS OF FCB
  1009.         DX = OFFSET ADDRESS OF FCB
  1010.         FCB contains new name starting at byte 17H.
  1011.         Return: AL =
  1012.                 00 = FILE FOUND
  1013.                 FF = FILE NOT FOUND
  1014. -----------------------------------------------------------
  1015. INT 21 - Internal - does nothing
  1016.         AH = 18h
  1017.         Return: AL = 0
  1018. -----------------------------------------------------------
  1019. INT 21 - Default Disk Number
  1020.         AH = 19h
  1021.         Return: AL = current drive number (letter - 'A')
  1022. -----------------------------------------------------------
  1023. INT 21 - SET DISK TRANSFER AREA ADDRESS
  1024.         AH = 1AH
  1025.         DS = SEGMENT ADDRESS OF BUFFER
  1026.         DX = OFFSET ADDRESS OF BUFFER
  1027. -----------------------------------------------------------
  1028. INT 21 - Default Drive Disk Size
  1029.         AH = 1BH
  1030.         Return: DS:BX points to FAT ID byte
  1031.                 DX = number of allocation units on disk
  1032.                 AL = number of sectors per AU
  1033.                 CX = number of bytes per sector
  1034. -----------------------------------------------------------
  1035. INT 21 - Specific Drive's Disk Size
  1036.         AH = 1CH
  1037.         DL = Drive Number to check
  1038.         Return: DS:BX points to FAT ID byte
  1039.                 DX = number of allocation units on disk
  1040.                 AL = number of sectors per AU
  1041.                 CX = number of bytes per sector
  1042. -----------------------------------------------------------
  1043. INT 21 - Internal - does nothing
  1044.         AH = 1Dh
  1045.         Return: AL = 0
  1046. -----------------------------------------------------------
  1047. INT 21 - Internal - does nothing
  1048.         AH = 1Eh
  1049.         Return: AL = 0
  1050. -----------------------------------------------------------
  1051. INT 21 - Internal - GET DEFAULT DRIVE PARAMETER BLOCK
  1052.         AH = 1Fh
  1053.         Return: AL = 00h No Error
  1054.                      FFh Error
  1055.                 (DS:BX) = ADDRESS OF DRIVE PARAMETER BLOCK.
  1056. (For DOS 2.x and 3.x, this just invokes function 32h with DL = 0)
  1057. -----------------------------------------------------------
  1058. INT 21 - Internal - does nothing
  1059.         AH = 20h
  1060.         Return: AL = 0
  1061. -----------------------------------------------------------
  1062. INT 21 - RANDOM DISK RECORD READ
  1063.         AH = 21H
  1064.         DS = SEGMENT ADDRESS OF FCB
  1065.         DX = OFFSET ADDRESS OF FCB
  1066.         Return: AL =
  1067.                 0 = SUCCESSFUL READ
  1068.                 1 = END OF FILE
  1069.                 2 = DATA TRANSFER AREA TOO SMALL
  1070.                 3 = PARTIAL RECORD, EOF
  1071. -----------------------------------------------------------
  1072. INT 21 - Random Disk Write
  1073.         AH = 22H
  1074. Same setup as Random Read, but writes to disk
  1075. -----------------------------------------------------------
  1076. INT 21 - FILE SIZE
  1077.         AH = 23H
  1078.         DS = SEGMENT ADDRESS OF FCB
  1079.         DX = OFFSET ADDRESS OF FCB
  1080.         Return: AL =
  1081.                 00 = FILE FOUND
  1082.                 FF = FILE NOT FOUND
  1083. FCB SET TO NO. OF RECORDS
  1084. -----------------------------------------------------------
  1085. INT 21 - Set Random Record Field
  1086.         AH = 24H
  1087.         DS = SEGMENT ADDRESS OF FCB
  1088.         DX = OFFSET ADDRESS OF FCB
  1089. FCB must be OPEN already
  1090.         Return: Random Record Field of FCB is set to be
  1091.                 same as Current Block and Current Record.
  1092. -----------------------------------------------------------
  1093. INT 21 - Set Interrupt Vector
  1094.         AH = 25H
  1095.         AL = INT number
  1096.         DS:DX = new vector to be used for specified INT
  1097. -----------------------------------------------------------
  1098. INT 21 - Create PSP
  1099.         AH = 26H
  1100.         DX = Segment number to set up PSP at
  1101. Current PSP is copied to specified segment
  1102. -----------------------------------------------------------
  1103. INT 21 - RANDOM BLOCK READ
  1104.         AH = 27H
  1105.         DS = SEGMENT ADDRESS OF FCB
  1106.         DX = OFFSET ADDRESS OF FCB
  1107.         CX = NO. OF RECORDS TO BE READ
  1108.         Return: AL =
  1109.                 0 = SUCCESSFUL READ
  1110.                 1 = END OF FILE
  1111.                 2 = DATA TRANSFER AREA TOO SMALL
  1112.                 3 = PARTIAL RECORD, EOF
  1113. -----------------------------------------------------------
  1114. INT 21 - RANDOM BLOCK WRITE
  1115.         AH = 28H
  1116.         DS = SEGMENT ADDRESS OF FCB
  1117.         DX = OFFSET ADDRESS OF FCB
  1118.         CX = NO. OF RECORDS TO BE WRITTEN
  1119.         Return: AL =
  1120.                 0 = SUCCESSFUL WRITE
  1121.                 1 = DISKETTE FULL
  1122.                 2 = DATA TRANSFER AREA TOO SMALL
  1123. -----------------------------------------------------------
  1124. INT 21 - Parse Filename
  1125.         AH = 29h
  1126.         DS:SI = pointer to string to parse
  1127.         ES:DI = pointer to memory to fill with unopened FCB
  1128.         AL = bit mask to control parsing
  1129.             0 = 0: parsing stops if file separator found
  1130.                 1: leading separator ignored
  1131.             1 = 0: drive number in FCB set to default drive if not present
  1132.                    in string
  1133.                 1: drive number in FCB not changed
  1134.             2 = 0: filename in FCB set to blanks if no filename in string
  1135.                 1: filename in FCB not changed if string does not contain 
  1136.                    a filename
  1137.             3 = 0: extension in FCB set to blanks if no extension in string
  1138.                 1: extension left unchanged
  1139.         Return: AL = 00: no wildcards in name or extension
  1140.                      01: wildcards appeared
  1141.                 DS:SI = pointer to first byte after parsed string
  1142.                 ES:DI = unopened FCB
  1143. -----------------------------------------------------------
  1144. INT 21 - GET CURRENT DATE
  1145.         AH = 2AH
  1146.         Return: DL = DAY
  1147.                 DH = MONTH
  1148.                 CX = YEAR
  1149.                 AL = DAY OF THE WEEK (0=SUNDAY, 1=MONDAY, ETC.)
  1150. -----------------------------------------------------------
  1151. INT 21 - Set CURRENT DATE
  1152.         AH = 2Bh
  1153.         DL = day
  1154.         DH = month
  1155.         CX = year
  1156.         Return: AL = 0 if no error
  1157.                 AL = 0FFh if bad value sent to routine
  1158.         (DOS 3.3 also sets CMOS clock)
  1159.         (DESQview also accepts CX = 4445h and DX = 5351h, i.e. 'DESQ' as valid)
  1160. -----------------------------------------------------------
  1161. INT 21 - GET CURRENT TIME
  1162.         AH = 2CH
  1163.         Return: CH = HOURS
  1164.                 CL = MINUTES
  1165.                 DH = SEC
  1166.                 DL = SEC/100
  1167. NOTE: TIME IS UPDATED EVERY 5/100 SECOND
  1168. -----------------------------------------------------------
  1169. INT 21 - Set CURRENT TIME
  1170.         AH = 2DH
  1171.         CH = HOURS
  1172.         CL = MINUTES
  1173.         DH = SEC
  1174.         DL = SEC/100
  1175.         Return: AL = 0 if no error
  1176.                 AL = 0ffH if bad value sent to routine
  1177.         (DOS 3.3 also sets CMOS clock)
  1178. -----------------------------------------------------------
  1179. INT 21 - Set Verify Flag
  1180.         AH = 2EH
  1181.         DL = 0
  1182.         AL = 1 if VERIFY on
  1183.         AL = 0 if VERIFY off
  1184. -----------------------------------------------------------
  1185. INT 21 - Get Disk Transfer Area Address
  1186.         AH = 2FH
  1187.         Return: ES = SEGMENT address of DTA
  1188.                 BX = OFFSET address of DTA
  1189. -----------------------------------------------------------
  1190. INT 21 - Get DOS Version
  1191.         AH = 30H
  1192.         Return: AL = Major Version number
  1193.                 AH = Minor Version number
  1194.                 BH = OEM number
  1195.                 BL:CX = 24-bit user number
  1196. -----------------------------------------------------------
  1197. INT 21 - TERMINATE BUT STAY RESIDENT
  1198.         AH = 31H
  1199.         AL = EXIT CODE
  1200.         DX = PROGRAM SIZE, IN PARAGRAPHS
  1201. -----------------------------------------------------------
  1202. INT 21 - Internal - GET DRIVE PARAMETER BLOCK
  1203.         AH = 32H
  1204.         DL = DRIVE NUMBER
  1205.         0 = DEFAULT, 1 = A, ETC.
  1206.         Return: AL = 0FFH IF INVALID DRIVE NUMBER, ELSE
  1207.                 DS:BX = ADDRESS OF DRIVE PARAMETER BLOCK.
  1208.  
  1209.                 STRUCTURE OF DOS DRIVE PARAMETER BLOCK:
  1210.  
  1211. DPBLOCK         STRUCT          ;OFFSET
  1212. DISK_OFFSET     DB      ?       ;  0.  DRIVE NUMBER (0 = A, ETC.)
  1213. UNIT_OFFSET     DB      ?       ;  1.  UNIT NUMBER WITHIN DEVICE DRIVER
  1214. SECTOR_SIZE     DW      ?       ;  2.  NUMBER OF BYTES PER SECTOR
  1215. MAX_CLUSTER     DB      ?       ;  4.  LARGEST SECTOR NUMBER IN CLUSTER
  1216.                                 ;      ADD ONE FOR NUMBER OF SECTORS/CLUSTER
  1217. LOG2_SECTORS    DB      ?       ;  5.  LOG BASE TWO OF THE CLUSTER SIZE
  1218. RESERVED        DW      ?       ;  6.  NUMBER OF RESERVED (BOOT) SECTORS
  1219. FAT_COUNT       DB      ?       ;  8.  NUMBER OF COPIES OF THE FAT
  1220. ROOT_COUNT      DW      ?       ;  9.  NUMBER OF ROOT DIRECTORY ENTRIES
  1221. DATA_START      DW      ?       ; 11.  FIRST SECTOR OF DATA ON MEDIUM
  1222. MAX_NUMBER      DW      ?       ; 13.  LARGEST POSSIBLE CLUSTER NUMBER
  1223.                                 ;      SUBTRACT ONE FOR NUMBER OF CLUSTERS
  1224. FAT_SECTORS     DB      ?       ; 15.  NUMBER OF SECTORS IN ONE FAT COPY
  1225. ROOT_START      DW      ?       ; 16.  FIRST SECTOR OF ROOT DIRECTORY
  1226. DEVICE_ADDR     DD      ?       ; 18.  CORRESPONDING DEVICE DRIVER ADDRESS
  1227. DESCRIPTOR      DB      ?       ; 22.  MEDIA DESCRIPTOR BYTE FOR MEDIUM
  1228. VALID_BYTE      DB      ?       ; 23.  0FFH INDICATES BLOCK MUST BE REBUILT
  1229. NEXT_BLOCK      DD      ?       ; 24.  ADDRESS OF NEXT DEVICE BLOCK IN LIST
  1230.  
  1231. ;       FROM THIS POINT ON, DOS 3 DIFFERS FROM 2:
  1232.  
  1233.                 IF      DOS2
  1234. DIR_START       DW      ?       ; 28.  STARTING CLUSTER OF CURRENT DIRECTORY
  1235.                                 ;      ZERO INDICATES THE ROOT DIRECTORY
  1236. PATH_NAME       DB      64 DUP (?)
  1237.                                 ; 30.  ASCIIZ CURRENT DIRECTORY PATH STRING
  1238.                 ELSE    DOS3
  1239. ;               ON MY XT, THIS WAS ALWAYS:
  1240.                 DW      0
  1241.                 DW      0FFFFH
  1242.                 ENDIF
  1243. DPBLOCK         ENDS
  1244. -----------------------------------------------------------
  1245. INT 21 - Get or Set CONTROL-BREAK
  1246.         AH = 33H
  1247.         AL = 0 for Get or 1 for Put
  1248.         DL = 0 for OFF or 1 for ON
  1249.         Return: DL = 0 if BREAK=OFF or 1 if BREAK=ON
  1250.                 AL = FFH IF ERROR
  1251. -----------------------------------------------------------
  1252. INT 21 - Internal - Return CritSectFlag Pointer
  1253.         AH = 34H
  1254.         Return: ES:BX points to DOS "Critical Section Flag"
  1255.  
  1256. When byte pointed to is zero, DOS is supposed to be
  1257. safe to interrupt. NOT RELIABLE according to Chris Dunford.
  1258. Examination of DOS 2.10 code in this area
  1259. indicates that the byte immediately FOLLOWING this
  1260. "Critical Section Flag" must be 00 to permit the
  1261. PRINT.COM interrupt to be called. This suggests that
  1262. checking the WORD pointed to, rather than the BYTE,
  1263. might increase reliability of the test greatly.
  1264. -----------------------------------------------------------
  1265. INT 21 - Get Interrupt Vector
  1266.         AH = 35H
  1267.         AL = INT number
  1268.         Return: ES = Segment address of INT vector
  1269.                 BX = Offset address of INT vector
  1270. -----------------------------------------------------------
  1271. INT 21 - DISK SPACE
  1272.         AH = 36H
  1273.         DL = DRIVE NUMBER (1-4)
  1274.         Return: AX = ? (SIDES)
  1275.                 BX = ? (BLOCKS FREE)
  1276.                 CX = ? (BLOCK SIZE)
  1277.                 DX = ? (TOTAL BLOCKS)
  1278. NOTE: MULT AX x CX x BX for FREE SPACE ON DISK
  1279. MULT AX x CX x DX for TOTAL DISK SPACE
  1280. -----------------------------------------------------------
  1281. INT 21 - Internal - switchar/availdev
  1282.         AH = 37H
  1283.         AL =
  1284.         0 Read switch character (returns current character in DL)
  1285.         1 Set switch character (specify new character in DL)
  1286.         2 Read device availability (as set by function AL=3)
  1287.         3 Set device availability, where:
  1288.         DL = 0 means /DEV/ must preceed device names
  1289.         DL <> 0 means /DEV/ need not preceed device names
  1290.         Return: DL = Switch character (if AL=0 or 1)
  1291.                 Device availability flag (if AL=2 or 3)
  1292.                 AL=0FFh means the value in AL was not in the range 0-3.
  1293. Functions 2 & 3 appear not to be implemented for DOS 3.x
  1294. -----------------------------------------------------------
  1295. INT 21 - Get Country-Dependent Information
  1296.         AH = 38h
  1297.   DOS 2.x
  1298.         AL = 0  get current-country info
  1299.         DS:DX = segment:offset of buffer for returned info
  1300.         Return:
  1301.         BX = country code
  1302.         buffer at DS:DX filled as follows:
  1303.            bytes 0-1 = date format   0 = USA    mm dd yy
  1304.                                      1 = Europe dd mm yy
  1305.                                      2 = Japan  yy mm dd
  1306.            byte 2    = currency symbol
  1307.            byte 3    = 00h
  1308.            byte 4    = thousands separator char
  1309.            byte 5    = 00h
  1310.            byte 6    = decimal separator char
  1311.            byte 7    = 00h
  1312.            bytes 8-1Fh reserved
  1313.  
  1314.   DOS 3.x
  1315.         AL = 0 for current country
  1316.         AL = 01h thru 0FEh for specific country with code <255
  1317.         AL = 0FFh for specific country with code >= 255
  1318.            BX = 16-bit country code
  1319.         DS:DX = segment:offset of buffer for returned info
  1320.         DX = 0FFFFh if setting country code, rather than getting info
  1321.         Return: (if DX <> 0FFFFh)
  1322.            BX = country code
  1323.            DS:DX filled in:
  1324.               bytes 0-1 = date format (see above)
  1325.               bytes 2-6 = currency symbol string, ASCIZ
  1326.               byte 7    = thousands seaprator char
  1327.               byte 8    = 00h
  1328.               byte 9    = decimal separator char
  1329.               byte 0Ah  = 00h
  1330.               byte 0Bh  = date separator char
  1331.               byte 0Ch  = 00h
  1332.               byte 0Dh  = time separator char
  1333.               byte 0Eh  = 00h
  1334.               byte 0Fh  = currency format
  1335.                            bit 1 = number of spaces between value and curr sym
  1336.                            bit 0 = 0 if currency symbol precedes value
  1337.                                    1 if currency symbol follows value
  1338.               byte 10h  = number of digits after decimal in currency
  1339.               byte 11h  = time format
  1340.                            bit 0 = 0 if 12-hour clock
  1341.                                    1 if 24-hour clock
  1342.               bytes 12h-15h = address of case map routine (FAR CALL)
  1343.               byte 16h  = data-list separator char
  1344.               byte 17h  = 00h
  1345.               bytes 18h-21h reserved
  1346.          If error:
  1347.            CF set
  1348.            AX = error code
  1349. -----------------------------------------------------------
  1350. INT 21 - CREATE A SUBDIRECTORY (MKDIR)
  1351.         AH = 39H
  1352.         DS = SEGMENT address of ASCIIZ pathname
  1353.         DX = OFFSET address of ASCIIZ pathname
  1354.         Return: Flag CF = 1 if error
  1355.                 AX = Error Code if any
  1356. -----------------------------------------------------------
  1357. INT 21 - REMOVE A DIRECTORY ENTRY (RMDIR)
  1358.         AH = 3AH
  1359.         DS = SEGMENT address of ASCIIZ pathname
  1360.         DX = OFFSET address of ASCIIZ pathname
  1361.         Return: Flag CF = 1 if error
  1362.                 AX = Error Code if any
  1363. -----------------------------------------------------------
  1364. INT 21 - CHANGE THE CURRENT DIRECTORY (CHDIR)
  1365.         AH = 3BH
  1366.         DS = SEGMENT address of ASCIIZ
  1367.         DX = OFFSET address of ASCIIZ
  1368.         Return: Flag CF = 1 if error
  1369.                 AX = Error Code if any
  1370. -----------------------------------------------------------
  1371. INT 21 - CREATE A FILE WITH HANDLE (CREAT)
  1372.         AH = 3CH
  1373.         CX = ATTRIBUTES FOR FILE
  1374.         DS = SEGMENT ADDRESS OF ASCIIZ
  1375.         DX = OFFSET ADDRESS OF ASCIIZ
  1376.         Return: Flag CF = 1 if error
  1377.                 AX = File Handle or Error Code
  1378. -----------------------------------------------------------
  1379. INT 21 - OPEN DISK FILE WITH HANDLE
  1380.         AH = 3DH
  1381.         AL = ACCESS CODE
  1382.                 0 = Read Only
  1383.                 1 = Write Only
  1384.                 2 = Read/Write
  1385.                 Options (3.x):
  1386.                         80H = no inheritance
  1387.                         10H = deny read/write
  1388.                         20H = deny write
  1389.                         30H = deny read
  1390.                         40H = deny none
  1391.         DS = SEGMENT ADDRESS OF ASCIIZ
  1392.         DX = OFFSET ADDRESS OF ASCIIZ
  1393.         Return: Flag CF = 1 if error
  1394.                 AX = File Handle or Error Code
  1395. -----------------------------------------------------------
  1396. INT 21 - CLOSE A FILE WITH HANDLE
  1397.         AH = 3EH
  1398.         BX = FILE HANDLE
  1399.         Return: Flag CF = 1 if error
  1400.                 AX = Error Code if any
  1401. -----------------------------------------------------------
  1402. INT 21 - READ FROM FILE WITH HANDLE
  1403.         AH = 3FH
  1404.         BX = FILE HANDLE
  1405.         CX = NO. OF BYTES TO READ
  1406.         DS = SEGMENT ADDRESS OF BUFFER
  1407.         DX = OFFSET ADDRESS OF BUFFER
  1408.         Return: Flag CF = 1 if error
  1409.                 AX = Bytes Read or Error Code
  1410. -----------------------------------------------------------
  1411. INT 21 - WRITE TO FILE WITH HANDLE
  1412.         AH = 40H
  1413.         BX = FILE HANDLE
  1414.         CX = NO. OF BYTES TO Write
  1415.         DS = SEGMENT ADDRESS OF BUFFER
  1416.         DX = OFFSET ADDRESS OF BUFFER
  1417.         Return: Flag CF = 1 if error
  1418.                 AX = Bytes Read or Error Code
  1419. -----------------------------------------------------------
  1420. INT 21 - DELETE A FILE (UNLINK)
  1421.         AH = 41H
  1422.         DS = SEGMENT OF ASCIIZ TO DELETE
  1423.         DX = OFFSET OF ASCIIZ TO DELETE
  1424.         Return: Flag CF = 1 if error
  1425.                 AX = Error Code if any
  1426. -----------------------------------------------------------
  1427. INT 21 - MOVE FILE READ/WRITE POINTER (LSEEK)
  1428.         AH = 42H
  1429.         AL = METHOD VALUE
  1430.                 0 = offset from beginning of file
  1431.                 1 = offset from present location
  1432.                 2 = offset from end of file
  1433.         BX = FILE HANDLE
  1434.         CX = BYTES OFFSET HIGH
  1435.         DX = BYTES OFFSET LOW
  1436.         Return: Flag CF = 1 if error
  1437.                 AX = Offset low word or Error Code
  1438.                 DX = Offset high word
  1439. -----------------------------------------------------------
  1440. INT 21 - GET/PUT FILE ATTRIBUTES (CHMOD)
  1441.         AH = 43H
  1442.         AL =
  1443.         0 = GET FILE ATTRIBUTES
  1444.         1 = PUT FILE ATTRIBUTES
  1445.         CX = FILE ATTRIBUTES BITS ON PUT
  1446.         0 = READ ONLY
  1447.         1 = HIDDEN FILE
  1448.         2 = SYSTEM FILE
  1449.         3 = VOLUME LABEL
  1450.         4 = SUBDIRECTORY
  1451.         5 = WRITTEN SINCE BACKUP
  1452.         DX = POINTER TO FILE ASCIIZ FILE NAME
  1453.         Return: Flag CF = 1 if error
  1454.                 AX = Error Code if any
  1455.                 CX = FILE ATTRIBUTES ON GET
  1456. -----------------------------------------------------------
  1457. INT 21 - IOCTL
  1458.         AH = 44H
  1459.         AL =
  1460.         0 = Get device information (DX)
  1461.         1 = Set device information (DL, DH = 0)
  1462.                 DX BITS =
  1463.                 0 = console input device
  1464.                 1 = console output device
  1465.                 2 = null device
  1466.                 3 = clock device
  1467.                 5 = binary mode
  1468.                 6 = EOF
  1469.                 7 = is device
  1470.                         if not, EOF = 0 if channel has been written
  1471.                         bits 0-5 are block device number
  1472.                 12= network device
  1473.                 14= can process control strings (AL=2-5)
  1474.  
  1475.         2 = Read CX bytes to DS:DX from BX control chan
  1476.         3 = Write CX bytes from DS:DX from BX control chan
  1477.         4 = as 2 but for drive BL
  1478.         5 = as 3 but for drive BL
  1479.                 AX = number of bytes transfered
  1480.  
  1481.         6 = Get input status
  1482.         7 = Get output status
  1483.                 AX = FFH for ready or 00H for not ready
  1484.  
  1485.         8 = Is block device BL changeable? (DOS 3)
  1486.                 AX = 0 = yes
  1487.         9 = Is logical device BL local? (DOS 3)
  1488.                 DX (attribute word) bit 12 (1000H) = 0 = yes
  1489.         10= Is handle BX local? (DOS 3)
  1490.                 DX (attribute word) bit 15 (8000H) = 0 = yes
  1491.         11= Change sharing retry count to DX (def 3), (DOS 3)
  1492.                 delay CX (def 1)
  1493.         12= General IOCTL (DOS 3.3 [3.2?])
  1494.         BX = file handle (or BL = drive number w/0 = default)
  1495.         Return: Flag CF = 1 if error
  1496.                 AX = Error Code if any
  1497. -----------------------------------------------------------
  1498. INT 21 - Create Duplicate Handle (DUP)
  1499.         AH = 45H
  1500.         BX = file handle to duplicate
  1501.         Return: Flag CF = 1 if error
  1502.                 AX = File handle or Error Code
  1503. -----------------------------------------------------------
  1504. INT 21 - Force Duplicate Handle (FORCDUP) (DUP2)
  1505.         AH = 46H
  1506.         BX = Existing file handle
  1507.         CX = new file handle
  1508.         Return: Flag CF = 1 if error
  1509.                 AX = File handle or Error Code
  1510. -----------------------------------------------------------
  1511. INT 21 - Get Current Directory
  1512.         AH = 47H
  1513.         DL = drive (0=default, 1=A, etc.)
  1514.         DS:SI points to 64-byte buffer area
  1515.         Return: Flag CF = 1 if error
  1516.                 AX = Error Code if any
  1517. -----------------------------------------------------------
  1518. INT 21 - Allocate Memory
  1519.         AH = 48H
  1520.         BX = number of 16-byte paragraphs desired
  1521.         Return: Flag CF = 1 if error
  1522.                 AX = Segment of allocated memory or Error Code
  1523.                 BX = Maximum available on error
  1524. -----------------------------------------------------------
  1525. INT 21 - Free Memory
  1526.         AH = 49H
  1527.         ES = Segment address of area to be freed
  1528.         Return: Flag CF = 1 if error
  1529.                 AX = Error Code if any
  1530. -----------------------------------------------------------
  1531. INT 21 - Adjust Block Size (SETBLOCK)
  1532.         AH = 4AH
  1533.         ES = Segment address of block to change
  1534.         BX = New size in paragraphs
  1535.         Return: Flag CF = 1 if error
  1536.                 AX = Error Code if any
  1537.                 BX = Maximum available on error
  1538. -----------------------------------------------------------
  1539. INT 21 - Load or Execute (EXEC)
  1540.         AH = 4BH
  1541.         AL =
  1542.                 0 = load and execute program
  1543.                 2 = load (Internal) but do not execute
  1544.                 3 = load overlay; do not create PSP
  1545.         DS:DX = filename
  1546.         ES:BX = parameter block
  1547.                 AL =
  1548.                 0 =>    word segment environment pointer
  1549.                         dword command line pointer
  1550.                         dword FCB 1
  1551.                         dword FCB 2
  1552.                 3 =>    word segment load address
  1553.                         word segment relocation factor
  1554.         Return: Flag CF = 1 if error
  1555.                 AX = Error Code if any
  1556.  
  1557. struct exec {
  1558.         unsigned exec_magic;    /* 0x4d, 0x5a signature */
  1559.         unsigned exec_isr;      /* image size remainder (mod 512) */
  1560.         unsigned exec_size;     /* file size in pages (512) */
  1561.         unsigned exec_nrel;     /* number of relocation items */
  1562.         unsigned exec_hsize;    /* header size in paragraphs */
  1563.         unsigned exec_min;      /* minimum extra paragraphs */
  1564.         unsigned exec_max;      /* maximum extra paragraphs */
  1565.         unsigned exec_ss;       /* stack segment */
  1566.         unsigned exec_sp;       /* stack offset */
  1567.         unsigned exec_cksum;    /* word checksum of entire file */
  1568.         unsigned exec_pc;       /* initial pc */
  1569.         unsigned exec_cs;       /* code segment */
  1570.         unsigned exec_orel;     /* offset of relocation table */
  1571.         unsigned exec_ovno;     /* overlay number */
  1572. };
  1573. -----------------------------------------------------------
  1574. INT 21 - Quit With Exit Code (EXIT)
  1575.         AH = 4CH
  1576.         AL = exit code
  1577. -----------------------------------------------------------
  1578. INT 21 - GET EXIT CODE OF SUBPROGRAM (WAIT)
  1579.         AH = 4DH
  1580.         Return: AL = exit code of subprogram (FNs 31H or 4cH)
  1581.                 AH = circumstance which caused termination
  1582.                         0 = Terminate/abort
  1583.                         1 = Control-C
  1584.                         2 = Hard error
  1585.                         3 = Terminate and stay resident
  1586. -----------------------------------------------------------
  1587. INT 21 - Find First ASCIIZ (FIND FIRST)
  1588.         AH = 4EH
  1589.         CX = SEARCH ATTRIBUTES
  1590.         DS:DX = POINTER TO ASCIIZ FILENAME (WITH ATTRIBUTES)
  1591.         Return: Flag CF = 1 if error
  1592.                 AX = Error Code if any
  1593.                 (DTA) = data block
  1594. -----------------------------------------------------------
  1595. INT 21 - Find Next ASCIIZ (FIND NEXT)
  1596.         AH = 4FH
  1597.         Return: Flag CF = 1 if error
  1598.                 AX = Error Code if any
  1599.                 (DTA) = data block
  1600. -----------------------------------------------------------
  1601. INT 21 - Internal - Set PSP Segment
  1602.         AH = 50H
  1603.         BX = Segment address of new PSP
  1604. -----------------------------------------------------------
  1605. INT 21 - Internal - Get PSP Segment
  1606.         AH = 51H
  1607.         Return: BX = Current PSP Segment
  1608.  
  1609. struct psp {
  1610.         char psp_int20[2];      /* 00h: exit */
  1611.         unsigned psp_msize;     /* 02h: memory size in paragraphs */
  1612.         char psp_res0[1];       /* 04h: XXX (0) */
  1613.         char psp_dos[5];        /* 05h: far call to dos */
  1614.         int (*psp_term)();      /* 0ah: terminate address */
  1615.         unsigned psp_tseg;      /* 0ch: terminate segment */
  1616.         int (*psp_break)();     /* 0eh: break address */
  1617.         unsigned psp_bseg;      /* 10h: break segment */
  1618.         int (*psp_error)();     /* 12h: error address */
  1619.         unsigned psp_eseg;      /* 14h: error segment */
  1620.         unsigned psp_ppsp;      /* 16h: parent psp segment */
  1621.         char psp_ofile[20];     /* 18h: open files, 0xff = unused */
  1622.         unsigned psp_envp;      /* 2ch: environment segment */
  1623.         char psp_res2[4];       /* 2eh: XXX */
  1624.         int psp_nfiles;         /* 32h: max open files */
  1625.         char *psp_aofile;       /* 34h: ofile address */
  1626.         unsigned psp_aoseg;     /* 36h: ofile segment */
  1627.         char psp_res3[24];      /* 38h: XXX */
  1628.         char psp_int21[3];      /* 50h: int 21, far return */
  1629.         char psp_res4[2];       /* 53h: XXX */
  1630.         char psp_xfcb1[7];      /* 55h: FCB #1 extension */
  1631.         char psp_fcb1[9];       /* 5ch: FCB #1 */
  1632.         char psp_xfcb2[7];      /* 65h: FCB #2 extension */
  1633.         char psp_fcb2[20];      /* 6ch: FCB #2 */
  1634.         char psp_dma[128];      /* 80h: Command Tail */
  1635. };
  1636. -----------------------------------------------------------
  1637. INT 21 - Internal - Get Disk List
  1638.         AH = 52H
  1639.         Return: ES:BX points to DOS list of lists
  1640.  
  1641. List of Lists:
  1642. Bytes   Value
  1643. -2&-1   Segment of first memory control block
  1644. 0-3     Pointer to first DOS disk block (see func 36H)
  1645. 4-7     Partially Unknown. Pointer to a device driver. Maybe first
  1646.                resident driver?
  1647. 8-B     Pointer to CLOCK$ device driver, whether installable or
  1648.                resident
  1649. C-F     Pointer to actual CON: device driver, whether installable
  1650.                or resident
  1651. -----DOS 2.x
  1652. 10      Number of logical drives in system
  1653. 11-12   Maximum bytes/block of any block device
  1654. 13-16   unknown
  1655. 17      Beginning (not a pointer. The real beginning!) of NUL device
  1656.            driver. This is the first device on DOS's linked list
  1657.            of device drivers.
  1658. -----DOS 3.x
  1659. 10-11   Maximum bytes/block of any block device (0200H)
  1660. 12-15   Unknown. Pointer to current directory block????
  1661. 16-19   Partially Undefined: Pointer to array of drive info:
  1662.                51H bytes per drive, starting with A: ...
  1663.                00-3F Current path as ASCIIZ, starting with 'x:\'
  1664.                40-43 Unknown. I see zeros always
  1665.                44    Unknown. Flags? I see 40H, except for
  1666.                        entry after last valid entry = 00H
  1667.                45-48 Pointer to DOS Disk Block for this drive
  1668.                49-4A Unknown. Current track or block? -1 if never
  1669.                        accessed.
  1670.                4B-4E Unknown. I see -1 always
  1671.                4F-52 Unknown. I see 2 always
  1672. 1A-1D   Unknown. Pointer to data area, maybe including cluster
  1673.                allocation table?
  1674. 1E-1F   Unknown. I see zero always
  1675. 20      Number of block devices.
  1676. 21      Value of LASTDRIVE command in CONFIG.SYS (default 5)
  1677. 22      Beginning (not a pointer. The real beginning!) of NUL device
  1678.            driver. This is the first device on DOS's linked list
  1679.            of device drivers.
  1680. -----------------------------------------------------------
  1681. INT 21 - Internal - Translate BPB
  1682.         AH = 53H
  1683.         DS:SI points to BPB (Bios Parameter Block)
  1684.         ES:BP points to area for DOS Disk Block
  1685. Translates BPB (Bios Parameter Block, see below)
  1686. into a DOS Disk Block (see function call 32h).
  1687.  
  1688. BPB     
  1689. Bytes   Value
  1690. 0-1     Bytes/sector. Get from DDB bytes 2-3.
  1691. 2       Sectors/cluster. Get from: (DDB byte 4) + 1
  1692. 3-4     Reserved sectors. Get from: DDB bytes 6-7
  1693. 5       Number of FATs. Get from: DDB byte 8
  1694. 6-7     Number of root dir entries. Get from: DDB bytes 9-A
  1695. 8-9     Total # of sectors. Get from: 
  1696.         ((DDB bytes D-E) - 1) * (sectors per cluster (BPB byte 2))
  1697.           + (DDB Bytes B-C)
  1698. A       Media descriptor byte. Get from: DDB byte 16
  1699. B-C     Number of sectors/FAT. Get from: DDB byte F
  1700. -----------------------------------------------------------
  1701. INT 21 - Get Verify Flag
  1702.         AH = 54H
  1703.         Return: AL = 0 if flag OFF
  1704.                 AL = 1 if flag ON
  1705. -----------------------------------------------------------
  1706. INT 21 - Internal - Create PSP
  1707.         AH = 55H
  1708.         DX = Segment number to set up PSP at
  1709. Like FN 26H but creates "child" PSP rather
  1710. than copying existing one.
  1711. -----------------------------------------------------------
  1712. INT 21 - RENAME A FILE
  1713.         AH = 56H
  1714.         DS = SEGMENT OF ASCIIZ OLD NAME
  1715.         DX = OFFSET OF ASCIIZ OLD NAME
  1716.         ES = SEGMENT OF ASCIIZ NEW NAME
  1717.         DI = OFFSET OF ASCIIZ NEW NAME
  1718.         Return: Flag CF = 1 if error
  1719.                 AX = Error Code if any
  1720. -----------------------------------------------------------
  1721. INT 21 - Get/Put Date/Time
  1722.         AH = 57H
  1723.         AL = FUNCTION CODE
  1724.                 0 = GET DATE AND TIME
  1725.                 1 = SET DATE AND TIME
  1726.         BX = FILE HANDLE
  1727.         CX = TIME TO BE SET (IF AL = 1)
  1728.         DX = DATE TO BE SET (IF AL = 1)
  1729.         Return: Flag CF = 1 if error
  1730.                 AX = Error Code if any
  1731.                 CX = TIME OF LAST WRITE (IF AL = 0)
  1732.                 DX = DATE OF LAST WRITE (IF AL = 0)
  1733. -----------------------------------------------------------
  1734. INT 21 - Get/Set allocation strategy (DOS 3.x)
  1735.         AH = 58H
  1736.         AL = FUNCTION CODE
  1737.                 0 = GET ALLOCATION STRATEGY
  1738.                 1 = SET ALLOCATION STRATEGY
  1739.         BX = STRATEGY CODE (IF AL = 1)
  1740.                 0 = first fit
  1741.                 1 = best fit
  1742.                 2 = last fit
  1743.         Return: Flag CF = 1 if error
  1744.                 AX = Strategy code or Error Code
  1745. -----------------------------------------------------------
  1746. INT 21 - GET EXTENDED ERROR CODE (DOS 3.X)
  1747.         AH = 59H
  1748.         BX = VERSION CODE (0000 FOR DOS 3.0)
  1749.         Return: AX = EXTENDED ERROR CODE
  1750.                 BH = CLASS OF ERROR
  1751.                 BL = SUGGESTED ACTION CODE
  1752.                 CH = LOCUS (WHERE ERROR OCCURRED)
  1753.         Error codes:
  1754.                 01 function number invalid
  1755.                 02 file not found
  1756.                 03 path not found
  1757.                 04 too many open files
  1758.                 05 access denied
  1759.                 06 invalid handle
  1760.                 07 memory control block destroyed
  1761.                 08 insufficient memory
  1762.                 09 memory block address invalid
  1763.                 0A environment invalid
  1764.                 0B format invalid
  1765.                 0C access code invalid
  1766.                 0D data invalid
  1767.                 0F invalid drive
  1768.                 10 attempted to remove current directory
  1769.                 11 not same device
  1770.                 12 no more files
  1771.                 13 disk write-protected
  1772.                 14 unknown unit
  1773.                 15 drive not ready
  1774.                 16 unknown command
  1775.                 17 data error (CRC)
  1776.                 18 bad request structure length
  1777.                 19 seek error
  1778.                 1A unknwon media type
  1779.                 1B sector not found
  1780.                 1C printer out of paper
  1781.                 1D write fault
  1782.                 1E read fault
  1783.                 1F general failure
  1784.                 20 sharing violation
  1785.                 21 lock violation
  1786.                 22 disk change invalid
  1787.                 23 FCB unavailable
  1788.                 24-31 reserved
  1789.                 32 Network request not supported (DOS 3.1 + MS Networks)
  1790.                 33 Remote computer not listening
  1791.                 34 Duplicate name on network
  1792.                 35 Network name not found
  1793.                 36 Network busy
  1794.                 37 Network device no longer exists
  1795.                 38 Network BIOS command limit exceeded
  1796.                 39 Network adapter hardware error
  1797.                 3A Incorrect response from network
  1798.                 3B Unexpected network error
  1799.                 3C Incompatible remote adapter
  1800.                 3D Print queue full
  1801.                 3E Queue not full
  1802.                 3F Not enough space to print file
  1803.                 40 Network name was deleted
  1804.                 41 Network: Access denied
  1805.                 42 Network device type incorrect
  1806.                 43 Network name not found
  1807.                 44 Network name limit exceeded
  1808.                 45 Network BIOS session limit exceeded
  1809.                 46 Temporarily paused
  1810.                 47 Network request not accepted
  1811.                 48 Print/disk redirection paused (DOS 3.1 + MS Networks)
  1812.                 49-4F reserved
  1813.                 50 file exists
  1814.                 51 reserved
  1815.                 52 cannot make directory
  1816.                 53 fail on INT 24h
  1817.         Error Classes:
  1818.                 01 out of resource
  1819.                 02 temporary situation
  1820.                 03 authorization (denied access)
  1821.                 04 internal
  1822.                 05 hardware failure
  1823.                 06 system failure
  1824.                 07 application program error
  1825.                 08 not found
  1826.                 09 bad format
  1827.                 0A locked
  1828.                 0B media error
  1829.                 0C already exists
  1830.                 0D unknown
  1831.         Suggested Action:
  1832.                 01 retry
  1833.                 02 delayed retry
  1834.                 03 prompt user
  1835.                 04 abort after cleanup
  1836.                 05 immediate abort
  1837.                 06 ignore
  1838.                 07 retry after user intervention
  1839.         Error Locus:
  1840.                 01 unknown or not appropriate
  1841.                 02 block device
  1842.                 03 network related
  1843.                 04 serial device
  1844.                 05 memory related
  1845. -----------------------------------------------------------
  1846. INT 21 - CREATE TMEPORARY FILE (DOS 3.x)
  1847.         AH = 5AH
  1848.         DS:DX = POINTER TO DIRECTORY PATH NAME
  1849.         CX = FILE ATTRIBUTE
  1850.         Return: Flag CF = 1 if error
  1851.                 AX = Error Code if any
  1852.                 DS:DX = PATH NAME
  1853.  
  1854. NOTE: THE FILE CREATED IS NOT TRULY "TEMPORARY". IT MUST BE
  1855. REMOVED BY THE USER.
  1856. -----------------------------------------------------------
  1857. INT 21 - CREATE NEW FILE (DOS 3.x)
  1858.         AH = 5BH
  1859.         DS:DX = POINTER TO DIRECTORY PATH NAME
  1860.         CX = FILE ATTRIBUTE
  1861.         Return: Flag CF = 1 if error
  1862.                 AX = Error Code if any
  1863.                 DS:DX = PATH NAME
  1864.  
  1865. NOTE: UNLIKE FUNCTION 3CH, FUNCTION 5BH WILL FAIL IF THE FILE
  1866. ALREADY EXISTS.
  1867. -----------------------------------------------------------
  1868. INT 21 - LOCK/UNLOCK FILE ACCESS (DOS 3.x)
  1869.         AH = 5CH
  1870.         AL =
  1871.                 0 IF LOCK
  1872.                 1 IF UNLOCK
  1873.         BX = FILE HANDLE
  1874.         CX:DX = OFFSET TO LOCK
  1875.         SI:DI = AMOUNT TO LOCK
  1876.         Return: Flag CF = 1 if error
  1877.                 AX = Error Code if any
  1878. -----------------------------------------------------------
  1879. INT 21 - Internal - Unknown
  1880.         AH = 5DH XXX
  1881. -----------------------------------------------------------
  1882. INT 21 - Get Machine Name (DOS 3.1 + Microsoft Networks)
  1883.         AX = 5E00H
  1884.         DS:DX -> buffer for ASCIIZ name
  1885.         Return: Flag CF = 1 if error
  1886.                 AX = Error Code if any
  1887.                 CH = 0 if name not defined
  1888.                 CL = NETBIOS name number
  1889.                 DS:DX -> pointer to identifier if CH <> 0
  1890. -----------------------------------------------------------
  1891. INT 21 - Set Printer Setup (DOS 3.1 + Microsoft Networks)
  1892.         AX = 5E02H
  1893.         BX = Redirection list index
  1894.         CX = length of setup string <= 64
  1895.         DS:SI -> string buffer
  1896.         Return: Flag CF = 1 if error
  1897.                 AX = Error Code if any
  1898. -----------------------------------------------------------
  1899. INT 21 - Get Printer Setup (DOS 3.1 + Microsoft Networks)
  1900.         AX = 5E03H
  1901.         BX = Redirection list index
  1902.         ES:DI -> string buffer
  1903.         Return: Flag CF = 1 if error
  1904.                 AX = Error Code if any
  1905.                 CX = length of setup string <= 64
  1906. -----------------------------------------------------------
  1907. INT 21 - Get Redirection List Entry (DOS 3.1 + Microsoft Networks)
  1908.         AX = 5F02H
  1909.         BX = Redirection list index
  1910.         DS:SI -> 16 char local device name buffer
  1911.         ES:DI -> 128 char network name buffer
  1912.         Return: Flag CF = 1 if error
  1913.                 AX = Error Code if any
  1914.                 BH = Device status flag (BIT 0 = 0 if valid)
  1915.                 BL = device type (03 if printer, 04 if drive)
  1916.                 CX = stored param value
  1917.                 DX, BP destroyed
  1918. -----------------------------------------------------------
  1919. INT 21 - Redirect Device (DOS 3.1 + Microsoft Networks)
  1920.         AX = 5F03H
  1921.         BL = device type
  1922.                 03 = printer device
  1923.                 04 = file device
  1924.         CX = stored param value
  1925.         DS:SI -> source device name
  1926.         ES:DI -> destination ASCIIZ network path + ASCIIZ password
  1927.         Return: Flag CF = 1 if error
  1928.                 AX = Error Code if any
  1929. -----------------------------------------------------------
  1930. INT 21 - Cancel Redirection (DOS 3.1 + Microsoft Networks)
  1931.         AX = 5F04H
  1932.         DS:SI -> device name or network path
  1933.         Return: Flag CF = 1 if error
  1934.                 AX = Error Code if any
  1935. -----------------------------------------------------------
  1936. INT 21 - Internal - Resolve path string to fully qualified path string
  1937.         AH = 60h
  1938.         DI:SI = relative path strings
  1939.         ES:DI = buffer for fully qualified name
  1940.         Returns: buffer filled with qualified name
  1941.                  may return error code, unknown.
  1942. -----------------------------------------------------------
  1943. INT 21 - Internal - Unknown
  1944.         AH = 61H
  1945.         Returns AL = 0 in DOS 3.1 (unused function)
  1946. -----------------------------------------------------------
  1947. INT 21 - GET PSP ADDRESS (DOS 3.x)
  1948.         AH = 62H
  1949.         Return: BX = SEGMENT ADDRESS OF PSP
  1950. -----------------------------------------------------------
  1951. INT 21 - GET LEAD BYTE TABLE (DOS 2.25 only)
  1952.         AH = 63H
  1953.         AL = SUBFUNCTION
  1954.                 0 = get system lead byte table
  1955.                 1 = set/clear interim console flag
  1956.                 2 = get interim console flag
  1957.         DL = 1/0 to set/clear interim console flag
  1958.         Return: DS:SI -> lead byte table (AL = 0)
  1959.                 DL = interim console flag (AL = 2)
  1960. -----------------------------------------------------------
  1961. INT 21 - Internal - unknown (DOS 3.3)
  1962.         AH = 64h
  1963. -----------------------------------------------------------
  1964. INT 21 - GET EXTENDED COUNTRY INFORMATION (DOS 3.3)
  1965.         AH = 65h
  1966.         AL = info ID (1 - 6)
  1967.         BX = code page (-1=global code page)
  1968.         DX = country ID (-1=current country)
  1969.         ES:DI = pointer to country information buffer
  1970.         CX = size of buffer
  1971.         Return: AX = error code if carry set, otherwise
  1972.                 CX = size of country information returned
  1973.                 ES:DI = pointer to country information:
  1974.                         1 BYTE info ID
  1975.                         if info ID <> 1
  1976.                         1 DWORD pointer to information
  1977.                            if info ID == 1
  1978.                         1 WORD size
  1979.                         1 WORD country ID
  1980.                         1 WORD code page
  1981.                        34 BYTE see function 38h
  1982. -----------------------------------------------------------
  1983. INT 21 - GET/SET GLOBAL CODE PAGE TABLE (DOS 3.3)
  1984.         AH = 66h
  1985.         AL = 00h get global code page
  1986.              Return: AX = error code if carry flag set
  1987.                      BX = active code page
  1988.                      DX = system code page
  1989.            = 01h set global page
  1990.              BX = active code page
  1991.              DX = system code page (active page at boot time)
  1992.              Return: AX = error code if carry flag set
  1993. -----------------------------------------------------------
  1994. INT 21 - SET HANDLE COUNT (DOS 3.3)
  1995.         AH = 67h
  1996.         BX = desired number of handles (max 255)
  1997.         Return: Carry clear if ok
  1998.                 Carry set if error (and error code in AX)
  1999. -----------------------------------------------------------
  2000. INT 21 - COMMIT FILE - WRITE ALL BUFFERED DATA TO DISK (DOS 3.3)
  2001.         AH = 68H
  2002.         BX = file handle
  2003.         Return: carry flag set on error (and error code in AX)
  2004. -----------------------------------------------------------
  2005. INT 21 - DoubleDos -
  2006.         AX = E400h
  2007.         Return: AL <> 0 if DoubleDos is active
  2008. -----------------------------------------------------------
  2009. INT 21 - DoubleDos - Turn off Task Switching
  2010.         AH = EAh
  2011.         Return: task switching turned off
  2012. -----------------------------------------------------------
  2013. INT 21 - DoubleDos - Turn on Task Switching
  2014.         AH = EBh
  2015.         Return: task switching turned on
  2016. -----------------------------------------------------------
  2017. INT 21 - DoubleDos - Get Virtual Screen Address
  2018.         AH = ECh
  2019.         Return: ES = segment of virtual screen
  2020.                 Screen address can change if task-switching is on!!
  2021. -----------------------------------------------------------
  2022. INT 21 - DoubleDos - Give away time to other tasks
  2023.         AH = EEh
  2024.         AL = number of 55ms time slices to give away
  2025.         Return: returns after giving away time slices
  2026. -----------------------------------------------------------
  2027. INT 21 - CED installable commands
  2028.         AH = 0FFH
  2029.            AL = 0 add installable command
  2030.              BL = mode - bit 0 = 1 callable from DOS prompt
  2031.                          bit 1 = 1 callable from application
  2032.              DS:SI pointer to CR-terminated command name
  2033.              ES:DI pointer to FAR routine entry point
  2034.            AL = 1 remove installable command
  2035.              DS:SI pointer to CR-terminated command name
  2036.            AL = 2 reserved, may be used to test for CED installation
  2037.         Returns:
  2038.            CF set on error
  2039.              AX = 1 invalid function
  2040.                   2 command not found (subfunction 1 only)
  2041.                   8 insufficient memory (subfunction 0 only)
  2042.                  0Eh bad data (subfunction 0 only)
  2043.            AH = 0FFh if CED not installed
  2044. -----------------------------------------------------------
  2045. INT 22 - TERMINATE ADDRESS
  2046. FAR (DWORD) address of routine to be executed
  2047. when program "returns to DOS". Should NEVER be called directly.
  2048. -----------------------------------------------------------
  2049. INT 23 - CONTROL "C" EXIT ADDRESS
  2050. Automatically called from keyboard scanner when
  2051. CTRL-C or CTRL-BREAK is detected. Normally aborts program
  2052. and returns to DOS, but may be changed.
  2053. -----------------------------------------------------------
  2054. INT 24 - FATAL ERROR ABORT ADDRESS
  2055. Automatically called upon detection of unrecoverable
  2056. disk error. Normally prints "Abort, Retry, or Ignore?" message
  2057. and takes the reply, but may be changed if desired.
  2058.  
  2059. Provides the following values in registers on entry to interrupt handler:
  2060.         AH: bit 7 = 0 disk I/O error
  2061.                   = 1 other error -- if block device, bad FAT
  2062.                                   -- if char device, code in DI
  2063.             bit 6  unused
  2064.             bit 5 = 1 if Ignore allowed, 0 if not (DOS 3.2)
  2065.             bit 4 = 1 if Retry allowed, 0 if not (DOS 3.2?)
  2066.             bit 3 = 1 if Fail allowed, 0 if not (DOS 3.2)
  2067.             bit 2 \ disk area of error  00 = DOS area  01 = FAT
  2068.             bit 1 /                     10 = root dir  11 = data area
  2069.             bit 0 = 1 if write, 0 if read
  2070.         AL = drive number if AH bit 7 = 1, otherwise undefined
  2071.         BP:SI = address of device header for which error occurred
  2072.             block device if high bit of BP:SI+4 = 1
  2073.         low byte of DI:
  2074.            00 = write-protect error
  2075.            01 = unknown unit
  2076.            02 = drive not ready
  2077.            03 = unknown command
  2078.            04 = data error (bad CRC)
  2079.            05 = bad request structure length
  2080.            06 = seek error
  2081.            07 = unknown media type
  2082.            08 = sector not found
  2083.            09 = printer out of paper
  2084.            0A = write fault
  2085.            0B = read fault
  2086.            0C = general failure
  2087.            0F = invalid disk change (DOS 3.x)
  2088. Handler must return
  2089.         AL = 00  ignore error
  2090.            = 01  retry operation
  2091.            = 02  terminate program through INT 23
  2092.            = 03  fail system call in progress (DOS 3.2)
  2093. -----------------------------------------------------------
  2094. INT 25 - ABSOLUTE DISK READ
  2095.         AL = Drive number (0=A, 1=B, etc)
  2096.         DS:BX = Disk Transfer Address (buffer)
  2097.         CX = Number of sectors to read
  2098.         DX = First relative sector to read
  2099.         Return: Flag CF = 1 if error
  2100.                 AL = error code issued to INT 24h in low half of DI
  2101.                 AH = 80h if attachment failed to respond
  2102.                      40h if seek operation failed
  2103.                      20h if controller failed
  2104.                      10h if data error (bad CRC)
  2105.                      08h if DMA failure
  2106.                      04h if requested sector not found
  2107.                      03h if write-protected disk
  2108.                      02h if bad address mark
  2109.                      01h if bad command
  2110.        ORIGINAL FLAGS ON STACK!
  2111. -----------------------------------------------------------
  2112. INT 26 - ABSOLUTE DISK WRITE
  2113.         AL = Drive number (0=A, 1=B, etc)
  2114.         DS:BX = Disk Transfer Address (buffer)
  2115.         CX = Number of sectors to write
  2116.         DX = First relative sector to write
  2117.         Return: Flag CF = 1 if error
  2118.                 AL = error code issued to INT 24h in low half of DI
  2119.                 AH = same error codes as for INT 25h
  2120.         ORIGINAL FLAGS ON STACK!
  2121. -----------------------------------------------------------
  2122. INT 27 - TERMINATE BUT STAY RESIDENT
  2123.         CS = CURRENT PROGRAM SEGMENT
  2124.         DX = LAST PROGRAM BYTE + 1
  2125. -----------------------------------------------------------
  2126. INT 28 - Internal - Keyboard Busy Loop
  2127. This interrupt is called from inside the "get input
  2128. from keyboard" routine in DOS, if and only if it is safe to use
  2129. INT 21 to access the disk at that time. It is used primarily by
  2130. the PRINT.COM routines, but any number of other routines could
  2131. be chained to it by saving the original vector, and calling it
  2132. with a FAR call (or just JMPing to it) at the end of the new
  2133. routine.
  2134. Until PRINT.COM installs its own routine, this
  2135. interrupt vector simply points to an IRET opcode.
  2136. -----------------------------------------------------------
  2137. INT 29 - Internal - Fast Putchar
  2138. This interrupt is called from the DOS output routines
  2139. if output is going to a device rather than a file, and the
  2140. device driver's attribute word has bit 3 (04H) set to "1".
  2141. -----------------------------------------------------------
  2142. INT 2A - Network Installation Check (Microsoft Networks)
  2143.         AH = 00H
  2144.         Return: AH <> 0 if installed
  2145. -----------------------------------------------------------
  2146. INT 2A - Check Direct I/O (Microsoft Networks)
  2147.         AX = 0300H
  2148.         DS:SI -> ASCIIZ disk device name
  2149.         Return: CF == 0 if allowed
  2150. -----------------------------------------------------------
  2151. INT 2A - Execute NETBIOS (Microsoft Networks)
  2152.         AH = 04H
  2153.         AL = 0 for error retry, 1 for no retry
  2154.         ES:BX -> NCB
  2155.         Return: AX = 0 for no error
  2156.                 AH = 1, AL = error code
  2157. -----------------------------------------------------------
  2158. INT 2A - Get Network Resource Information (Microsoft Networks)
  2159.         AX = 0500H
  2160.         Return: AX = reserved
  2161.                 BX = # network names
  2162.                 CX = # commands
  2163.                 DX = # sessions
  2164. -----------------------------------------------------------
  2165. INT 2B - Internal routine for MSDOS (IRET) XXX
  2166. -----------------------------------------------------------
  2167. INT 2C - Internal routine for MSDOS (IRET) XXX
  2168. -----------------------------------------------------------
  2169. INT 2D - Internal routine for MSDOS (IRET) XXX
  2170. -----------------------------------------------------------
  2171. INT 2E - Internal - Execute Command
  2172.         ES:SI -> counted CR-terminated command string
  2173.  
  2174. The top-level command.com executes the command; all
  2175. registers are destroyed as in exec.
  2176. -----------------------------------------------------------
  2177. INT 2F - Multiplexor - PRINT Installation Check
  2178.         AX = 0100H
  2179.         Return: AL =
  2180.                 FFH if installed
  2181.                 01H if not installed, not OK to install
  2182.                 00H if not installed, OK to install
  2183. -----------------------------------------------------------
  2184. INT 2F - Multiplexor - PRINT Submit file
  2185.         AX = 0101H
  2186.         DS:DX -> packet of one byte level and DWORD file pointer
  2187.         Return: Flag CF = 1 if error
  2188.                 AX = Error Code if any
  2189. -----------------------------------------------------------
  2190. INT 2F - Multiplexor - PRINT Remove file
  2191.         AX = 0102H
  2192.         DS:DX -> file name (wildcards allowed)
  2193.         Return: Flag CF = 1 if error
  2194.                 AX = Error Code if any
  2195. -----------------------------------------------------------
  2196. INT 2F - Multiplexor - PRINT Remove all files
  2197.         AX = 0103H
  2198.         Return: Flag CF = 1 if error
  2199.                 AX = Error Code if any
  2200. -----------------------------------------------------------
  2201. INT 2F - Multiplexor - PRINT Hold queue/Get status
  2202.         AX = 0104H
  2203.         Return: Flag CF = 1 if error
  2204.                 AX = Error Code if any
  2205.                     1 if function invalid
  2206.                     2 if file not found
  2207.                     3 if path not found
  2208.                     4 if too many open files
  2209.                     5 if access denied
  2210.                     8 if queue full
  2211.                     9 if spooler busy
  2212.                    0Ch if name too long
  2213.                    0Fh if drive invalid
  2214.                 DX = Error count
  2215.                 DS:SI -> print queue (null-string terminated
  2216.                         list of 64-byte ASCIZ file names)
  2217. -----------------------------------------------------------
  2218. INT 2F - Multiplexor - PRINT Restart queue
  2219.         AX = 0105H
  2220.         Return: Flag CF = 1 if error
  2221.                 AX = Error Code if any
  2222. -----------------------------------------------------------
  2223. INT 2F - Multiplexor - ASSIGN Installation Check
  2224.         AX = 0600H
  2225.         Return: AH <> 0 if installed
  2226. -----------------------------------------------------------
  2227. INT 2F - Multiplexor - ASSIGN
  2228.         AX = 0601H XXX
  2229. -----------------------------------------------------------
  2230. INT 2F - Multiplexor - MSDOS Internal
  2231.         AH = 10H XXX
  2232. -----------------------------------------------------------
  2233. INT 2F - Multiplexor - MSDOS Internal
  2234.         AH = 11H XXX
  2235. -----------------------------------------------------------
  2236. INT 2F - Multiplexor - MSDOS Internal
  2237.         AH = 12H XXX
  2238. -----------------------------------------------------------
  2239. INT 2F - Multiplexor - APPEND Installation Check
  2240.         AX = B700H
  2241.         Return: AH <> 0 if installed
  2242. -----------------------------------------------------------
  2243. INT 2F - Multiplexor - APPEND
  2244.         AX = B701H XXX
  2245. -----------------------------------------------------------
  2246. INT 2F - Multiplexor - Network Program Installation Check
  2247.         AX = B800H
  2248.         Return: AH <> 0 if installed
  2249. -----------------------------------------------------------
  2250. INT 2F - Multiplexor - Get Current Post Address
  2251.         AX = B803H
  2252.         Return: ES:BX = post address
  2253. -----------------------------------------------------------
  2254. INT 2F - Multiplexor - Set New Post Address
  2255.         AX = B804H
  2256.         ES:BX = new post address
  2257. -----------------------------------------------------------
  2258. INT 30 -> (NOT A VECTOR!) FAR jump instruction for CP/M-style calls
  2259. INT 31
  2260. -----------------------------------------------------------
  2261. INT 32 -> not used
  2262. -----------------------------------------------------------
  2263. INT 33 -> USED BY MICROSOFT MOUSE
  2264. -----------------------------------------------------------
  2265. INT 40 -> Relocated (by fixed disk) Floppy Handler (original INT 13h)
  2266. -----------------------------------------------------------
  2267. INT 41 -> Fixed Disk Params
  2268.         dw      cylinders
  2269.         db      heads
  2270.         dw      0
  2271.         dw      write pre-comp
  2272.         db      0
  2273.         db      0 "control byte"
  2274.         db      0, 0, 0
  2275.         dw      landing zone
  2276.         db      sectors/track
  2277.         db      0
  2278. -----------------------------------------------------------
  2279. INT 42 -> Relocated (by EGA) Video Handler (original INT 10h)
  2280. -----------------------------------------------------------
  2281. INT 43 -> EGA Initialization Params
  2282. -----------------------------------------------------------
  2283. INT 44 -> EGA/PCjr fonts
  2284. -----------------------------------------------------------
  2285. INT 45 -> reserved
  2286. -----------------------------------------------------------
  2287. INT 46 -> Secondary Fixed Disk Params (see INT 41h)
  2288. -----------------------------------------------------------
  2289. INT 47 -> reserved
  2290. -----------------------------------------------------------
  2291. INT 48 -> PCjr Cordless Keyboard Translation
  2292. -----------------------------------------------------------
  2293. INT 49 -> PCjr Non-keyboard Scan Code Translation Table
  2294. -----------------------------------------------------------
  2295. INT 4A -> AT User Alarm
  2296. -----------------------------------------------------------
  2297. INT 4B -> reserved
  2298. -----------------------------------------------------------
  2299. INT 4C -> reserved
  2300. -----------------------------------------------------------
  2301. INT 4D -> reserved
  2302. -----------------------------------------------------------
  2303. INT 4E -> reserved
  2304. -----------------------------------------------------------
  2305. INT 4F -> reserved
  2306. -----------------------------------------------------------
  2307. INT 50-57 -> IRQ0-IRQ7 relocated by DESQview
  2308. -----------------------------------------------------------
  2309. INT 5C - NETBIOS interface
  2310.         ES:BX -> Network Control Block
  2311. -----------------------------------------------------------
  2312. INT 70 thru 77 - AT Vectored Hardware Lines
  2313.         IRQ8    -       real-time clock
  2314.         IRQ9    -       LAN adapter 1 (rerouted to INT 0Ah by BIOS)
  2315.         IRQ10   -       reserved
  2316.         IRQ11   -       reserved
  2317.         IRQ12   -       reserved
  2318.         IRQ13   -       80287 error (rerouted to INT 2 by BIOS)
  2319.         IRQ14   -       fixed disk
  2320.         IRQ15   -       reserved
  2321. -----------------------------------------------------------
  2322. INT 86 - Relocated (by NETBIOS) INT 18
  2323. -----------------------------------------------------------
  2324. INT F8 - INTERVAL TIMER (10 MSEC)
  2325. -----------------------------------------------------------
  2326. INT FA - USART READY (RS-232C)
  2327. -----------------------------------------------------------
  2328. INT FB - USART Rx READY (keyboard)
  2329. -----------------------------------------------------------
  2330.